-3

向 ArrayList 添加元素时出错。我mArrayList.add(oneToolkit);在其他活动中遇到错误,相同的方法工作正常。当我评论 mArrayList.add(oneToolkit);每件事都很好。Foolowing 是我的 AsyncTask 代码和其中调用的方法。

private void getToolkits(){     
    JSONObject jsonObject = JSONParser.getJsonObject(URL);
    Log.d(Constants.TAG,"jsonObject: "+jsonObject.toString());
    try {
        JSONArray AllResults = jsonObject.getJSONArray("AppTrainee");
        //Log.d(Constants.TAG,"External Training: "+ AllResults.toString() + " Length: "+ AllResults.length());
        JSONObject newObject = AllResults.getJSONObject(0);
        JSONArray newArray = newObject.getJSONArray("Training Toolkits");
        Log.d(Constants.TAG, "Lenght: "+newArray.length());
        for(int i=0;i<newArray.length();i++){
                JSONObject oneResult = newArray.getJSONObject(i);
                Log.d(Constants.TAG,"Name "+i+" : "+oneResult.getString("ToolkitName"));
                Toolkit oneToolkit = new Toolkit();
                oneToolkit.setToolkitID(Integer.parseInt(oneResult.getString("ToolkitID")));
                oneToolkit.setToolkitName(oneResult.getString("ToolkitName"));
                oneToolkit.setDisplayOrder(Integer.parseInt(oneResult.getString("DisplayOrder")));
                oneToolkit.setButtonImage(oneResult.getString("Tk_ButtonImage"));
                mArrayList.add(oneToolkit);

        }
        Log.d(Constants.TAG, "Done");
    } catch (JSONException e) {
        e.printStackTrace();
    }

}

private void showToolkits(){
    //mAdapter = new ToolkitsAdapter(getApplicationContext(), mArrayList);
    //mGridView.setAdapter(mAdapter);
}

private class GetDataTask extends AsyncTask<String, Void, Void> {
    private final ProgressDialog dialog = new ProgressDialog(ToolkitsActivity.this);

    // can use UI thread here
    protected void onPreExecute() {
        this.dialog.setMessage("Loading...");
        this.dialog.setCancelable(false);
        this.dialog.show();
    }

    // automatically done on worker thread (separate from UI thread)
    protected Void doInBackground(final String... args) {
        getToolkits();
        return null;
    }

    // can use UI thread here
    protected void onPostExecute(final Void unused) {
        if (this.dialog.isShowing()) {
            this.dialog.dismiss();
            showToolkits();
        }
    }
}

日志猫

03-07 22:25:27.758: W/dalvikvm(1041): threadid=9: thread exiting with uncaught exception (group=0x40015560)
03-07 22:25:27.788: E/AndroidRuntime(1041): FATAL EXCEPTION: AsyncTask #1
03-07 22:25:27.788: E/AndroidRuntime(1041): java.lang.RuntimeException: An error occured while executing doInBackground()
03-07 22:25:27.788: E/AndroidRuntime(1041):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
03-07 22:25:27.788: E/AndroidRuntime(1041):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
03-07 22:25:27.788: E/AndroidRuntime(1041):     at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
03-07 22:25:27.788: E/AndroidRuntime(1041):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
03-07 22:25:27.788: E/AndroidRuntime(1041):     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
03-07 22:25:27.788: E/AndroidRuntime(1041):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
03-07 22:25:27.788: E/AndroidRuntime(1041):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
03-07 22:25:27.788: E/AndroidRuntime(1041):     at java.lang.Thread.run(Thread.java:1019)
03-07 22:25:27.788: E/AndroidRuntime(1041): Caused by: java.lang.NullPointerException
03-07 22:25:27.788: E/AndroidRuntime(1041):     at uk.org.humanfocus.ToolkitsActivity.getToolkits(ToolkitsActivity.java:60)
03-07 22:25:27.788: E/AndroidRuntime(1041):     at uk.org.humanfocus.ToolkitsActivity.access$0(ToolkitsActivity.java:43)
03-07 22:25:27.788: E/AndroidRuntime(1041):     at uk.org.humanfocus.ToolkitsActivity$GetDataTask.doInBackground(ToolkitsActivity.java:87)
03-07 22:25:27.788: E/AndroidRuntime(1041):     at uk.org.humanfocus.ToolkitsActivity$GetDataTask.doInBackground(ToolkitsActivity.java:1)
03-07 22:25:27.788: E/AndroidRuntime(1041):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
03-07 22:25:27.788: E/AndroidRuntime(1041):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
03-07 22:25:27.788: E/AndroidRuntime(1041):     ... 4 more
03-07 22:25:30.008: E/WindowManager(1041): Activity uk.org.humanfocus.ToolkitsActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4052f1a0 that was originally added here
03-07 22:25:30.008: E/WindowManager(1041): android.view.WindowLeaked: Activity uk.org.humanfocus.ToolkitsActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4052f1a0 that was originally added here
03-07 22:25:30.008: E/WindowManager(1041):  at android.view.ViewRoot.<init>(ViewRoot.java:258)
03-07 22:25:30.008: E/WindowManager(1041):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
03-07 22:25:30.008: E/WindowManager(1041):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
03-07 22:25:30.008: E/WindowManager(1041):  at android.view.Window$LocalWindowManager.addView(Window.java:424)
03-07 22:25:30.008: E/WindowManager(1041):  at android.app.Dialog.show(Dialog.java:241)
03-07 22:25:30.008: E/WindowManager(1041):  at uk.org.humanfocus.ToolkitsActivity$GetDataTask.onPreExecute(ToolkitsActivity.java:82)
03-07 22:25:30.008: E/WindowManager(1041):  at android.os.AsyncTask.execute(AsyncTask.java:391)
03-07 22:25:30.008: E/WindowManager(1041):  at uk.org.humanfocus.ToolkitsActivity.onCreate(ToolkitsActivity.java:39)
03-07 22:25:30.008: E/WindowManager(1041):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-07 22:25:30.008: E/WindowManager(1041):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-07 22:25:30.008: E/WindowManager(1041):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-07 22:25:30.008: E/WindowManager(1041):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-07 22:25:30.008: E/WindowManager(1041):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-07 22:25:30.008: E/WindowManager(1041):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 22:25:30.008: E/WindowManager(1041):  at android.os.Looper.loop(Looper.java:123)
03-07 22:25:30.008: E/WindowManager(1041):  at android.app.ActivityThread.main(ActivityThread.java:3683)
03-07 22:25:30.008: E/WindowManager(1041):  at java.lang.reflect.Method.invokeNative(Native Method)
03-07 22:25:30.008: E/WindowManager(1041):  at java.lang.reflect.Method.invoke(Method.java:507)
03-07 22:25:30.008: E/WindowManager(1041):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-07 22:25:30.008: E/WindowManager(1041):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-07 22:25:30.008: E/WindowManager(1041):  at dalvik.system.NativeStart.main(Native Method)
4

2 回答 2

2

你 mArrayList 是空的。只是尝试初始化它

List<Toolkit> mArrayList= new ArrayList<Toolkit>();
于 2013-03-13T06:50:42.207 回答
1

这是此错误的原因。

Caused by: java.lang.NullPointerException 03-07 22:25:27.788: 

可能缺少创建此对象 mArrayList

调试你的代码,我认为你发现了错误。

于 2013-03-13T06:41:43.420 回答