当前位置: 代码迷 >> Android >> AsyncTask中的onPostExecute没有执行解决思路
  详细解决方案

AsyncTask中的onPostExecute没有执行解决思路

热度:80   发布时间:2016-04-28 03:26:49.0
AsyncTask中的onPostExecute没有执行
本人新手,想做一个类微博,几个fragment可以切换的页面。
但是MainActivity中,通过Fragment[]获取其中一个ListFragment的时候,总是获取为空,在ListFragment中断点时发现onPostExecute这方法死活不执行,前面的doInBackground都已经可以获取服务器的数据,并成功转换。
已经百度,google了很多方法,还是没解决,求大神指点。
贴一下代码:
MainActivity类:其中mFragments[1] 老获取为空
public class MainActivity extends FragmentActivity {
private Fragment[] mFragments;
private ListFragment listFragment;
private RadioGroup bottomRg;
private FragmentManager fragmentManager;
private FragmentTransaction fragmentTransaction;
private RadioButton rbOne, rbTwo, rbThree, rbFour;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
mFragments = new Fragment[3];
fragmentManager = getSupportFragmentManager();
mFragments[0] = fragmentManager.findFragmentById(R.id.fragement_main);
mFragments[1] = fragmentManager.findFragmentById(R.id.fragement_search);
mFragments[2] = fragmentManager.findFragmentById(R.id.fragement_setting);
fragmentTransaction = fragmentManager.beginTransaction().hide(mFragments[0]).hide(mFragments[1]).hide(mFragments[2]);
fragmentTransaction.show(mFragments[0]).commit();
setFragmentIndicator();
}


ListFragment类:这里onPostExecute就一直不执行
 
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
     Log.d(TAG, "onCreateView");
        View v = inflater.inflate(R.layout.list_res_tab, container, false);
        return v;
    }
    

@Override
public void onActivityCreated(Bundle savedInstanceState) {
Log.d(TAG, "OnCreate");
super.onActivityCreated(savedInstanceState); 
new ListResAsyncTask().execute(url);
     try {
            Class.forName("android.os.AsyncTask");
     } catch (ClassNotFoundException e) {
            e.printStackTrace();
     }
Log.d(TAG, "OnCreate1");
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
System.out.println("Click On List Item!!!");
super.onListItemClick(l, v, position, id);
}
@Override
public void onPause() {
super.onPause();
}

    public class ListResAsyncTask extends AsyncTask<String, Void, List<Map<String,Object>>>
    {
        @Override
        protected void onPreExecute()
        {
         super.onPreExecute();
        }
        @Override
        protected List<Map<String,Object>> doInBackground(String... params)
        {
            String citiesString = HttpUtils.sendPostMessage(params[0], "utf-8");
            //    解析服务器端的json数据

         listItems = JsonUtils.parseRestaurant(citiesString);
         try {
                Class.forName("android.os.AsyncTask");
         } catch (ClassNotFoundException e) {
                e.printStackTrace();
         }
            return listItems;
        }
        @SuppressLint("ShowToast")
@Override
        protected void onPostExecute(List<Map<String,Object>> result)
        {
         // TODO Auto-generated method stub
         super.onPostExecute(result);
         if(result == null){
         Log.d(TAG, "获取信息失败!");
         Toast.makeText(getActivity(), "获取信息失败!", 3000);
         }else{
         final String[] from = new String[]{"photograph","title","region","restaurant","price","summary","time"};
         final int[] to = new int[]{R.id.photograph,R.id.title,R.id.region,R.id.restaurant,R.id.price,R.id.summary,R.id.time};
                //创建适配器
     SimpleAdapter adapter = new SimpleAdapter(getActivity(),result,R.layout.list_res_item,from,to);
     setListAdapter(adapter);
     Log.d(TAG, "onPostExecute");
         }
        }
    }


报错:
12-04 17:34:50.093: E/AndroidRuntime(28260): FATAL EXCEPTION: main
12-04 17:34:50.093: E/AndroidRuntime(28260): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fatground.test/com.fatground.test.MainActivity}: java.lang.NullPointerException
12-04 17:34:50.093: E/AndroidRuntime(28260):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2068)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2093)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at android.app.ActivityThread.access$600(ActivityThread.java:134)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1204)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at android.os.Looper.loop(Looper.java:137)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at android.app.ActivityThread.main(ActivityThread.java:4814)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at java.lang.reflect.Method.invokeNative(Native Method)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at java.lang.reflect.Method.invoke(Method.java:511)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at dalvik.system.NativeStart.main(Native Method)
12-04 17:34:50.093: E/AndroidRuntime(28260): Caused by: java.lang.NullPointerException
12-04 17:34:50.093: E/AndroidRuntime(28260):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:656)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:570)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at android.app.Activity.performStart(Activity.java:5018)
12-04 17:34:50.093: E/AndroidRuntime(28260):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2041)
12-04 17:34:50.093: E/AndroidRuntime(28260):  ... 11 more

------解决思路----------------------
把这句话 删掉 试试看:super.onPostExecute(result);
------解决思路----------------------
NullPointerException   各种打印  看 这个空指针是哪个
------解决思路----------------------
引用:
Quote: 引用:

把这句话 删掉 试试看:super.onPostExecute(result);

还是不行~~~网上有个说法说必须在UI线程中执行,请问fragment属于UI线程吗~~~



在线程doinbackground之后,在onPostExecute中处理 这个时候已经回到主线程了。
这样看也看不出是什么问题,只有调试才能看出问题了
------解决思路----------------------
拜托,你都找到哪个是空指针了,就对症下药啊,看是不是传参的问题,或者是初始化的问题,构造中的问题?多打几个Log出来,慢慢调。