2013-10-14 3 views
1

내 AsyncTask.OnPostExecute에서 내 MainActivity.JSONCallBackComplete로 일부 JSONObject 데이터를 다시 전달하려고합니다.안드로이드 AsyncTask - 활동 콜백 nullPointerException

10-14 18:40:25.820: E/AndroidRuntime(4153): FATAL EXCEPTION: main 
10-14 18:40:25.820: E/AndroidRuntime(4153): java.lang.NullPointerException 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at com.icerge.revivaltimes.MainActivity.JSONCallBackComplete(MainActivity.java:31) 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at com.icerge.revivaltimes.JsonObj.onPostExecute(JsonObj.java:70) 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at com.icerge.revivaltimes.JsonObj.onPostExecute(JsonObj.java:1) 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at android.os.AsyncTask.finish(AsyncTask.java:417) 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at android.os.AsyncTask.access$300(AsyncTask.java:127) 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at android.os.Looper.loop(Looper.java:144) 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at android.app.ActivityThread.main(ActivityThread.java:4937) 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at java.lang.reflect.Method.invoke(Method.java:521) 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
10-14 18:40:25.820: E/AndroidRuntime(4153):  at dalvik.system.NativeStart.main(Native Method) 

내 MainActivity 클래스는 다음과 같다 : I가 된 JSONObject가 나는 다음과 같은 execption을 얻을 내 통과 백을 확인하려고 할 때

내 문제는

public class MainActivity extends Activity{ 

     private JSONObject jsonData = null; 

     public void JSONCallBackComplete(JSONObject jsonData){ 
      this.jsonData = jsonData; 
      Log.e("TESTing in callback: ", jsonData.toString() ); 
     } 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      new JsonObj(this).execute("http://myserver/json"); 
     } 
    } 

그리고 내 AsyncTask를 클래스로입니다 다음과 같습니다 :

public class JsonObj extends AsyncTask<String, Void, JSONObject>{ 
    MainActivity activity; 
    int tid; 
    String term; 

    public JsonObj(MainActivity activity){ 
     this.activity = activity; 
//  Log.e("TESTING: ", activity.getClass().toString()); 
    } 

    @Override 
    protected JSONObject doInBackground(String... url) { 
     // TODO Auto-generated method stub 
     DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams()); 
     HttpPost httppost = new HttpPost(url[0]); 
     JSONObject jsonObject = null; 
     // Depends on your web service 
     httppost.setHeader("Content-type", "application/json"); 

     InputStream inputStream = null; 
     String result = null; 
     try { 
      HttpResponse response = httpclient.execute(httppost);   
      HttpEntity entity = response.getEntity(); 

      inputStream = entity.getContent(); 
      // json is UTF-8 by default 
      BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
      StringBuilder sb = new StringBuilder(); 

      String line = null; 
      while ((line = reader.readLine()) != null){ 
       sb.append(line + "\n"); 
      } 
      result = sb.toString(); 
      Log.e("JSON-Test [RESULT]: ", result); 
      jsonObject = new JSONObject(result); 
     } catch (Exception e) { 
      Log.e("JSON-Test [exception]: ", e.toString()); 
     } 
     finally { 
      try{if(inputStream != null)inputStream.close();}catch(Exception squish){} 
     } 

     return jsonObject; 
    } 

    @Override 
protected void onPostExecute(JSONObject result) { 
    // TODO Auto-generated method stub 
    super.onPostExecute(result); 
    if(!result.equals(null)){ 
     this.activity.JSONCallBackComplete(result); 
    } 
} 
} 

저는 AsyncTask에서 생성자가 MainActivity - 텍스트 및 JSONObject 인수를 사용하여 내 JSONCallBackComplete 피드백 함수를 호출하는 데 사용.

그러나 JSON-DATA를 표시하는 대신 위에서 붙여 넣은 예외가 있습니다.

+0

'MainActivity'의 31 행이 null 인 것처럼 보입니다. jsonData 객체가 돌아 왔을 때 null이 아닌지 확실합니까? – tyczj

+0

'onPostExecute()'에'result'가'null'입니까? – codeMagic

+0

관련 장소에서 '.equals (NULL)'체크를 수행했지만 nullpointer-exception이 계속 발생합니다. 내 코드가 onPostExecute 함수의 체크 표시로 업데이트됩니다. – sisko

답변

1

당신은 NullPointerException입니다. .equals() 보통 있는지 확인하기 위해 구현되어 있기 때문에 제가 보는 첫 번째는, 이것은 실제로 당신은 정말 null에 비교 .equals()를 사용해서는 안

if (result != null) { 

해야 여기

if(!result.equals(null)){ 

에서오고있다 두 객체의 사람이 인식하는 값은 메모리 주소가 아니라 동일합니다. null 메모리 주소와 비교하려면 직접 == 또는 !=을 사용하십시오. 여기서 Java가 주소를 비교합니다 (원하는 값).

+0

감사합니다. 그에 따라 결과 확인을 수정했지만 if 문은 실행되지 않습니다. 그것은 아마도 내 doInBackground 함수에서 데이터가 전송되고 있음을 의미합니다. 그렇지 않으면 표시되지 않습니다. – sisko

+0

네트워크 요청이 실패했을 수 있습니다. StringBuilder'sb'가 추가를 마친 후에 무엇인지 확인하십시오. – bclymer

+0

doInBackground 함수의 문자열 빌더에는 서버에서 가져온 모든 데이터가 있습니다. JSON 데이터를 올바르게 인쇄합니다. – sisko