2013-05-16 2 views
0

J'ai essayé d'analyser certaines données JSON dans Android, mais je rencontre un problème. Mon application se bloque dès que je lance l'activité, il semble qu'elle lance une exception NullPointerException, mais je n'ai aucune idée de ce qui ne va pas.AsyncTask bloque l'application immédiatement

Le code:

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 

Répondre

2

vous n'avez pas initalized votre objet tâche asynck.

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

Merci! Je suis nouveau sur le développement Android, cela aide beaucoup. – Lazze

1

Lorsque vous appelez

myfirst.execute(Url); 

dans onCreate(), MyFirstMethod MyFirst n'a pas encore été instancié.

Il est une solution simple:

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

Au lieu de cela

 myfirst.execute(Url); 

utilisent ce

 new MyFirstMethod().execute(Url); 

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