레이블이 java인 게시물을 표시합니다. 모든 게시물 표시
레이블이 java인 게시물을 표시합니다. 모든 게시물 표시

2014년 6월 24일 화요일

Anonymous Class For Android

익명클래스..

C언어에서는 콜백의 성향을 담고 있는 클래스 느낌이 난다..

머리가 없고 몸체만 있는 함수...

머리가 없다는 얘기는 곧 .. 호출하는 방법은 어떻게 해야될까?

helloworld() ? call helloworld()  ?

기억 날때는 잘 알지만 까먹는 것을 대비하여 코드를 통해 몸으로 익히자.

안드로이드에는 Main Thread에서만 UI 관련된 사항을 처리할 수 있다.
즉, 임의로 Thread를 만들어서 UI와 관련된 사항을 처리하면
에러를 출력할 것이다..

여기서, 많이 접하게 되는 것 중 하나인 AsyncTask 클래스를 통해 기억하자


package com.example.test;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
public class Request extends AsyncTask<String, Void, Bitmap>{
    
    private String mUrl = "";
    
    private RequestListener mRequestListener;
    
    public Request(String url) {
        this.mUrl = url;
    }
    
    @Override
    protected Bitmap doInBackground(String... params) {
        // TODO Auto-generated method stub
    
        Bitmap bitmap = null;
        
        try {
            URL url = new URL(mUrl);
            URLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true);
            conn.connect();
            InputStream input = conn.getInputStream();
            bitmap = BitmapFactory.decodeStream(input);
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return bitmap;
    }
    
    @Override
    protected void onPostExecute(Bitmap result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        
        if(null != result) {
            mRequestListener.onRequestCompleted(result);
        }
    }
    
    public void setOnRequestListener(RequestListener requestListener) {
        mRequestListener = requestListener;
    }
}


package com.example.test;
import android.graphics.Bitmap;
public interface RequestListener {
    void onRequestCompleted(Bitmap result);
}

RequestActivity.java

package com.example.test;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.widget.ImageView;
public class RequestActivity extends Activity {
    @Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.activity_request);
        Request request = new Request("http://sstatic.naver.net/search/img3/h1_naver2.png");
        request.setOnRequestListener(new RequestListener() {
            @Override
            public void onRequestCompleted(Bitmap result) {
                // TODO Auto-generated method stub
                ImageView iv = (ImageView) findViewById(R.id.iv_url_img);
                iv.setImageBitmap(result);
            }
        });
        request.execute();
    }
}

activity_request.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <ImageView
        android:id="@+id/iv_url_img"
        android:layout_width="fill_content"
        android:layout_height="fill_content"/>
</LinearLayout>

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="19" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name="com.example.test.RequestActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>