2012-01-19 4 views
0

나는 Ficklr에서 이미지를 다운로드하고 ImageView에로드하기 위해 안드로이드에 간단한 앱을 개발 중입니다. 문제를 피하기 위해 asyncTask와 브로드 캐스트 수신기를 사용하고 있습니다. 내가 그것을 실행하려고하면 onReceive에서 JSON 응답 witout 문제가 발생합니다. 내가 onReceive에서 실행하려고하면 그러나 플리커 이미지를로드하는 또 다른 방법 (searchPhoto이) 나는이 오류를 얻을 :Android 브로드 캐스트 수신, 추가 기능 추가 기능

01-19 22:24:25.914: E/AndroidRuntime(28284): FATAL EXCEPTION: main 
01-19 22:24:25.914: E/AndroidRuntime(28284): java.lang.RuntimeException: Error receiving broadcast Intent { act=com.jalbacar.restapi.SEARCH (has extras) } in [email protected] 
01-19 22:24:25.914: E/AndroidRuntime(28284): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:905) 
01-19 22:24:25.914: E/AndroidRuntime(28284): at android.os.Handler.handleCallback(Handler.java:587) 
01-19 22:24:25.914: E/AndroidRuntime(28284): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-19 22:24:25.914: E/AndroidRuntime(28284): at android.os.Looper.loop(Looper.java:123) 
01-19 22:24:25.914: E/AndroidRuntime(28284): at android.app.ActivityThread.main(ActivityThread.java:4668) 
01-19 22:24:25.914: E/AndroidRuntime(28284): at java.lang.reflect.Method.invokeNative(Native Method) 
01-19 22:24:25.914: E/AndroidRuntime(28284): at java.lang.reflect.Method.invoke(Method.java:521) 
01-19 22:24:25.914: E/AndroidRuntime(28284): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) 
01-19 22:24:25.914: E/AndroidRuntime(28284): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) 
01-19 22:24:25.914: E/AndroidRuntime(28284): at dalvik.system.NativeStart.main(Native Method) 
01-19 22:24:25.914: E/AndroidRuntime(28284): Caused by: java.lang.NullPointerException 
01-19 22:24:25.914: E/AndroidRuntime(28284): at com.jalbacar.restapi.SearchActivity.searchPhoto(SearchActivity.java:89) 
01-19 22:24:25.914: E/AndroidRuntime(28284): at com.jalbacar.restapi.SearchActivity$1.onReceive(SearchActivity.java:110) 
01-19 22:24:25.914: E/AndroidRuntime(28284): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892) 

SearchActivity을

package com.jalbacar.restapi; 

import java.io.IOException; 
import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URI; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.client.methods.HttpGet; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.jalbacar.restapi.RestTask; 

public class SearchActivity extends Activity { 

private static final String SEARCH_ACTION = "com.jalbacar.restapi.SEARCH"; 
private static final String SEARCH_URI = "http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key=xxxxxxxxxxxxxxxxxx&photoset_id=72157624057488617&format=json&jsoncallback=?"; 

private TextView result; 
private ProgressDialog progress; 
private Bitmap bmFlickr; 
private ImageView imageFlickrPhoto; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setTitle("Activity"); 
    result = new TextView(this); 
    setContentView(result); 
    imageFlickrPhoto= (ImageView)findViewById(R.id.flickrPhoto); 




    //Create the search request 
    try{    

     HttpGet searchRequest = new HttpGet(new URI(SEARCH_URI)); 

     RestTask task = new RestTask(this,SEARCH_ACTION); 
     task.execute(searchRequest); 
     //Display progress to the user 
     progress = ProgressDialog.show(this, "Searching", "Waiting For Results...", true); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    registerReceiver(receiver, new IntentFilter(SEARCH_ACTION)); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    unregisterReceiver(receiver); 
} 

public void searchPhoto(){ 
    URL FlickrPhotoUrl; 
    try { 
     FlickrPhotoUrl = new URL("http://farm5.staticflickr.com/4056/4659741303_4e994ba9aa_s.jpg"); 


     HttpURLConnection httpConnection = (HttpURLConnection) FlickrPhotoUrl.openConnection(); 
     httpConnection.setDoInput(true); 

     httpConnection.connect(); 
     InputStream inputStream = httpConnection.getInputStream(); 
     bmFlickr = BitmapFactory.decodeStream(inputStream); 
     if (bmFlickr != null){ 
       imageFlickrPhoto.setImageBitmap(bmFlickr); 
     } 
     if(progress != null) { 
      progress.dismiss(); 
     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 



} 

//bradcast receiver 
private BroadcastReceiver receiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 

     //String response = intent.getStringExtra(RestTask.HTTP_RESPONSE); 
     //result.setText(response); 
     Toast.makeText(SearchActivity.this, "Galeria2", Toast.LENGTH_LONG).show(); 
     searchPhoto(); 
    } 
}; 

대부분라도 유용 간단한 문제 나 매우 분명 뭔가,하지만 나는 주니어 Android 개발자입니다. 그러니 인내심을 가져주십시오. 미리 감사드립니다

답변

0

You'v는 89 행에 NPE가 있습니다. 따라서 레이아웃에 문제가 있다고 생각합니다. onCreate()를 살펴보십시오 :

TextView를 콘텐츠로 설정했지만 ImageView를 찾으려고합니다. Xml에서 레이아웃을 설정하거나 이와 비슷한 작업을 수행하면됩니다.

LinearLayout conatiner = new LinearLayout(this); 
container.setOrientation(LinearLayout.VERTICAL); 
container.addView(result = new TextView(this)); 
container.addView(result = new ImageView(this)); 
setContentView(container);