[英]Getting Execute before finishing the task Android
Hi I'm running the Asynctask in my activity and getting the data from the server. 嗨,我在我的活动中运行Asynctask并从服务器获取数据。 In
onPostExecute
metod I'm inserting the data in Database now I want to pass those ids in two different fragments I'm passing the the ids by following code: 在
onPostExecute
方法中,我现在将数据插入数据库中,我想在两个不同的片段中传递这些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);
But above lines of code get executed before the AsyncTask fininshed. 但是上面的代码行是在AsyncTask完成之前执行的。 but i have written this line
new CategoryFrag().execute();
但是我已经写了这行
new CategoryFrag().execute();
above this code. 上面的代码。 what should i do.
我该怎么办。
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: 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
call a method defined in your activity from your onPostExecute
method. 从
onPostExecute
方法调用活动中定义的方法。 And write the above code inside that method. 并在该方法中编写以上代码。
If the async task is in another class, the pass context to the async task, and in the onPostExecute
method after fetching data from the db, do this: 如果异步任务在另一个类中,则将传递上下文传递给异步任务,并在从数据库中获取数据后在
onPostExecute
方法中执行以下操作:
((YourCallingActivity)mContext).methodName();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.