【发布时间】:2014-02-02 05:50:52
【问题描述】:
您好,我正在我的活动中运行 Asynctask 并从服务器获取数据。在onPostExecute metod 中,我正在将数据插入数据库中,现在我想在两个不同的片段中传递这些 id,我通过以下代码传递这些 id:
Bundle bundle = new Bundle();
bundle.putStringArray(BConstant.TAXONOMY_TID, dbtids);
bundle.putStringArray(BConstant.PRODUCT_CATEGORY_NAMES,
dblistProCategory);
ProductCategoryFragment.newInstance(bundle);
// ProductDetailsFragment
Bundle bundleForProductList = new Bundle();
bundleForProductList
.putStringArray(BConstant.TAXONOMY_TID, dbtids);
bundleForProductList.putString(BConstant.WEB_SERVICES_COOKIES,
cookie);
bundleForProductList.putStringArray(
BConstant.PRODUCT_CATEGORY_NAMES, dblistProCategory);
ProductListFragment.newInstance(bundleForProductList);
但上面的代码行在 AsyncTask 完成之前执行。但我在这段代码上方写了这一行new CategoryFrag().execute();。我该怎么办。
已编辑
protected void onPostExecute(JSONArray result) {
listItems = new ArrayList<String>();
for (int i = 0; i < result.length(); i++) {
try {
listItems
.add(result.getJSONObject(i)
.getString(BConstant.NAME_CONSTANT)
.toString());
} catch (Exception ex) {
ex.printStackTrace();
}
}
listProCategory = listItems.toArray(new String[0]);
returnsTID = saDatabaseHandler.getProductCategoryTID();
for (int i = 0; i < tids.length; i++) {
if (!returnsTID.contains(tids[i])) {
saDatabaseHandler.insertProductCategoryData(
tids[i], listProCategory[i]);
}
}
getOfflineData();
}
LOGCAT:
02-02 11:41:00.451: E/AndroidRuntime(20901): FATAL EXCEPTION: main
02-02 11:41:00.451: E/AndroidRuntime(20901): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.abc.xyz/com.abc.xyz.ProductListActivity}: java.lang.NullPointerException
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2114)
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2139)
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.app.ActivityThread.access$700(ActivityThread.java:143)
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.os.Handler.dispatchMessage(Handler.java:99)
02-02 11 :41:00.451: E/AndroidRuntime(20901): at android.os.Looper.loop(Looper.java:137)
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.app.ActivityThread.main(ActivityThread.java:4960)
02-02 11:41:00.451: E/AndroidRuntime(20901): at java.lang.reflect.Method.invokeNative(Native Method)
02-02 11:41:00.451: E/AndroidRuntime(20901): at java.lang.reflect.Method.invoke(Method.java:511)
02-02 11:41:00.451: E/AndroidRuntime(20901): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
02-02 11:41:00.451: E/AndroidRuntime(20901): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
02-02 11:41:00.451: E/AndroidRuntime(20901): at dalvik.system.NativeStart.main(Native Method)
02-02 11:41:00.451: E/AndroidRuntime(20901): Caused by: java.lang.NullPointerException
02-02 11:41:00.451: E/AndroidRuntime(20901): at java.util.Arrays$ArrayList.<init>(Arrays.java:38)
02-02 11:41:00.451: E/AndroidRuntime(20901): at java.util.Arrays.asList(Arrays.java:154)
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:141)
02-02 11:41:00.451: E/AndroidRuntime(20901): at com.abc.xyz.ProductCategoryFragment$DisplayProductCategoryListArrayAdapter.<init>(ProductCategoryFragment.java:175)
02-02 11:41:00.451: E/AndroidRuntime(20901): at com.abc.xyz.ProductCategoryFragment.onActivityCreated(ProductCategoryFragment.java:113)
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:848)
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1017)
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1804)
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.app.Activity.performCreate(Activity.java:5206)
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
02-02 11:41:00.451: E/AndroidRuntime(20901): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2078)
02-02 11:41:00.451: E/AndroidRuntime(20901): ... 11 more
【问题讨论】:
-
将所有代码移至
onPostExecute -
@Raghunandan 异常即将到来
-
@Raghunandan 让我通过分段调用上述代码来清除我传递 id 的问题。所以首先我想完成活动类的 AsyncTask 然后我只想启动片段类代码。
-
这段代码在 onPost 里面?
-
@Amrola 不,但我也尝试过 onPostExecute。
标签: java android android-asynctask ui-thread