내 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를 표시하는 대신 위에서 붙여 넣은 예외가 있습니다.
'MainActivity'의 31 행이 null 인 것처럼 보입니다. jsonData 객체가 돌아 왔을 때 null이 아닌지 확실합니까? – tyczj
'onPostExecute()'에'result'가'null'입니까? – codeMagic
관련 장소에서 '.equals (NULL)'체크를 수행했지만 nullpointer-exception이 계속 발생합니다. 내 코드가 onPostExecute 함수의 체크 표시로 업데이트됩니다. – sisko