当查询解析用户并在 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(不推荐)。所以在你的片段中检查数据是否已经可用然后不要加载它。
抱歉问了几乎相同的问题,因为我的声誉很低无法在那里发表评论。
所以我正在使用 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(不推荐)。所以在你的片段中检查数据是否已经可用然后不要加载它。