当查询解析用户并在 listFragment 中显示它们时,在片段之间快速切换时应用程序崩溃

when doing query for parseUsers and shoing them in listFragment, while switching fast from fragment to fragment the app crashs

抱歉问了几乎相同的问题,因为我的声誉很低无法在那里发表评论。

所以我正在使用 parse.com 并查询用户并将他们放入片段列表中。

该应用程序可以运行,但是当我在片段之间快速切换时,它崩溃并出现异常:java.lang.IllegalStateException:内容视图尚未创建

之前我的代码在onResume中,但据我了解需要在onCreateView中,仍然不明白为什么,因为onResume在onCreateView之后。不管怎样,这是 mu 代码:

public class FriendsFragment extends ListFragment {

protected List<ParseUser> mFriends;
protected ParseUser mCurrentUser;
protected ParseRelation<ParseUser> mFriendsRelation;

@InjectView(R.id.fragmentFriendsSpinner) ProgressBar mSpinner;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_friends, container, false);
    ButterKnife.inject(this, rootView);
    mSpinner.setVisibility(View.INVISIBLE);

    mCurrentUser = ParseUser.getCurrentUser();
    mFriendsRelation = mCurrentUser.getRelation(ParseConstants.KEY_FRIENDS_RELATION);

    ParseQuery<ParseUser> query = mFriendsRelation.getQuery();
    query.orderByAscending(ParseConstants.KEY_LASTNAME);
    query.addAscendingOrder(ParseConstants.KEY_FIRSTNAME);
    mSpinner.setVisibility(View.VISIBLE);
    query.findInBackground(new FindCallback<ParseUser>() {
        @Override
        public void done(List<ParseUser> friends, ParseException e) {
            mSpinner.setVisibility(View.INVISIBLE);
            if (e == null) {
                // Success
                mFriends = friends;
                int usersAmount = mFriends.size();
                String[] fullNames = new String[usersAmount];
                int i = 0;
                for (ParseUser user : mFriends) {
                    fullNames[i] = user.getString(ParseConstants.KEY_FIRSTNAME) + " " +
                            user.getString(ParseConstants.KEY_LASTNAME);
                    i++;
                }
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                        getListView().getContext(),
                        android.R.layout.simple_list_item_1,
                        fullNames
                );
                setListAdapter(adapter);
            } else {
                mSpinner.setVisibility(View.INVISIBLE);
                // Show error to user
                OkCustomDialog dialog = new OkCustomDialog(
                        getListView().getContext(),
                        getString(R.string.friend_list_updating_error_title),
                        e.getMessage());
                dialog.show();

            }
        }
    });

    return rootView;
}
}

我收到的这个 catLog:

06-11 08:18:47.526  25134-25134/com.example.android.donotbelateapp     W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception  (group=0x41c54c08)
06-11 08:18:47.531  25134-25134/com.example.android.donotbelateapp  E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.android.donotbelateapp, PID: 25134
java.lang.IllegalStateException: Content view not yet created
        at android.support.v4.app.ListFragment.ensureList(ListFragment.java:328)
        at android.support.v4.app.ListFragment.getListView(ListFragment.java:222)
        at com.example.android.donotbelateapp.ui.fragments.FriendsFragment.done(FriendsFragment.java:71)
        at com.example.android.donotbelateapp.ui.fragments.FriendsFragment.done(FriendsFragment.java:56)
        at com.parse.ParseTaskUtils.run(ParseTaskUtils.java:107)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5602)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
        at dalvik.system.NativeStart.main(Native Method)

第 71 行是 ArrayAdapter 适配器 = new ArrayAdapter(

感谢您的帮助。

这是因为 public void done(List friends, ParseException e) 是在收到后台任务的响应时执行的,但是你的片段不存在,因为它被销毁了。所以应用程序崩溃了。

我认为你应该将加载的数据放在存储(DB)中,或者 ApplicationData(不推荐)。所以在你的片段中检查数据是否已经可用然后不要加载它。