2013-05-16 188 views
0

我一直在試圖解析Android中的一些JSON數據,但我遇到了問題。我的應用在我啓動該活動後立即崩潰,似乎是拋出了NullPointerException,但我不知道哪裏出了什麼問題。AsyncTask立即崩潰應用程序

代碼:

MyFirstMethod myfirst; 
private CardUI mCardView; 
private String Url = "http://www.lgb.dk/test.json"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_track); 
    // Show the Up button in the action bar. 
    setupActionBar(); 

    Intent intent = getIntent(); 
    String trackNumber = intent.getStringExtra(MainActivity.TRACKNUMBER); 

    // init CardView 
    mCardView = (CardUI) findViewById(R.id.cardsview); 
    mCardView.setSwipeable(false); 

    myfirst.execute(Url); 

    // add one card 
    //mCardView.addCard(new MyCard("", "Some content!")); 

    // draw cards 
    mCardView.refresh(); 
} 

public class MyFirstMethod extends AsyncTask<String, Void, String> { 
    ProgressDialog dialog; 

    @Override 
    protected void onPreExecute() { 

     super.onPreExecute(); 
     dialog = new ProgressDialog(DisplayTrackActivity.this); 
     dialog.setMessage("Loading...."); 
     dialog.show(); 

    } 

    @Override 
    protected String doInBackground(String... urls) { 

     String url = urls[0]; 

     StringBuilder builder = new StringBuilder(); 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(url); 
     try { 
      HttpResponse response = client.execute(httpGet); 
      StatusLine statusLine = response.getStatusLine(); 
      int statusCode = statusLine.getStatusCode(); 
      if (statusCode == 200) { 
      HttpEntity entity = response.getEntity(); 
      InputStream content = entity.getContent(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
      while ((reader.readLine()) != null) { 
       //builder.append(line); 
      } 
      } else { 
      Log.e(DisplayTrackActivity.class.toString(), "Failed to download file"); 
      } 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     String result = builder.toString(); 

     return result; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

     try { 
      JSONArray jsonArray = new JSONArray(result); 
      Log.i(DisplayTrackActivity.class.getName(), 
       "Number of entries " + jsonArray.length()); 
      for (int i = 0; i < jsonArray.length(); i++) { 
      JSONObject jsonObject = jsonArray.getJSONObject(i); 
      mCardView.addCard(new MyCard(DisplayTrackActivity.class.getName(), jsonObject.getString("eventDescription"))); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     super.onPostExecute(result); 
     dialog.dismiss(); 
     dialog.cancel(); 

    } 

} 

的logcat:

05-16 14:50:15.622: E/AndroidRuntime(29771): FATAL EXCEPTION: main 
05-16 14:50:15.622: E/AndroidRuntime(29771): java.lang.RuntimeException: Unable to     start activity  ComponentInfo{dk.lgb.trackandtrace/dk.lgb.trackandtrace.DisplayTrackActivity}: java.lang.NullPointerException 
05-16 14:50:15.622: E/AndroidRuntime(29771): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at android.os.Looper.loop(Looper.java:137) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at android.app.ActivityThread.main(ActivityThread.java:5041) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at java.lang.reflect.Method.invokeNative(Native Method) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at java.lang.reflect.Method.invoke(Method.java:511) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at dalvik.system.NativeStart.main(Native Method) 
05-16 14:50:15.622: E/AndroidRuntime(29771): Caused by: java.lang.NullPointerException 
05-16 14:50:15.622: E/AndroidRuntime(29771): at dk.lgb.trackandtrace.DisplayTrackActivity.onCreate(DisplayTrackActivity.java:54) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at android.app.Activity.performCreate(Activity.java:5104) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
05-16 14:50:15.622: E/AndroidRuntime(29771): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
05-16 14:50:15.622: E/AndroidRuntime(29771): ... 11 more 

回答

2

你沒有initalized您asynck任務對象。

myFirst = new MyFirstMethod(); 
myFirst.execute(url); 
+0

謝謝!我對Android開發很陌生,這對我有很大的幫助。 – Lazze

1

當你的onCreate()調用

myfirst.execute(Url); 

,MyFirstMethod myFirst尚未實例化。

這是一個簡單的解決辦法:

myFirst = new MyFirstMethod(); 
myFirst.execute(url); 
0

取而代之的是

 myfirst.execute(Url); 

使用本

 new MyFirstMethod().execute(Url); 

        or 
     myfirst = new MyFirstMethod(); 
     myfirst.execute(Url);