0

我一直在尝试在 Android 中解析一些 JSON 数据,但遇到了问题。我的应用程序在启动活动后立即崩溃,似乎它正在抛出 NullPointerException,但我不知道出了什么问题。

编码:

    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();

    }

}

日志猫:

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
4

3 回答 3

2

你还没有初始化你的 asynck 任务对象。

myFirst = new MyFirstMethod();
myFirst.execute(url);
于 2013-05-16T13:02:58.757 回答
1

你打电话时

myfirst.execute(Url);

在 onCreate() 中,MyFirstMethod myFirst 还没有被实例化。

这是一个简单的修复:

myFirst = new MyFirstMethod();
myFirst.execute(url);
于 2013-05-16T13:01:44.533 回答
0

而不是这个

       myfirst.execute(Url);

用这个

      new MyFirstMethod().execute(Url); 

                   or
      myfirst = new MyFirstMethod();
      myfirst.execute(Url); 
于 2013-05-16T13:05:42.640 回答