이상한 오류가 발생했습니다. getListView(). getContext()를 사용하여 얻은 컨텍스트를 가진 경고 대화 상자를 정의했습니다. 하지만 logcat은 IllegalStateException을 보여줍니다. 이것은 findInBackGround() 메서드가 종료되기 전에 작업을 닫을 때 활동이 종료되고 findInBackGround() 메서드가 백그라운드에서 실행되고 백그라운드에서 계속 실행되므로 컨텍스트가 없기 때문일 수 있습니다. 06 : :이 로그 캣은LogCat이 IllegalStateException을 표시하는 이유는 무엇입니까?
02-08 00:06:22.444: E/AndroidRuntime(26541): FATAL EXCEPTION: main
02-08 00
public class InboxFragment extends ListFragment {
protected List<ParseObject> myMessages;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_inbox, container,
false);
return rootView;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
String fileType = myMessages.get(position).getString(
ParseConstants.KEY_FILETYPE);
ParseFile file = myMessages.get(position).getParseFile(
ParseConstants.KEY_FILE);
Uri uri = Uri.parse(file.getUrl());
if (fileType.equals(R.string.filetype_image)) {
Intent i = new Intent(getActivity(), ViewImageActivity.class);
i.setData(uri);
startActivity(i);
} else {
Intent i = new Intent();
i.setData(uri);
i.setType("video/*");
startActivity(i);
}
List<String> count = myMessages.get(position).getList(
ParseConstants.KEY_RECEPIENTSIDS);
if (count.size() == 1) {
myMessages.get(position).deleteInBackground();
} else {
myMessages.get(position).getList(ParseConstants.KEY_RECEPIENTSIDS)
.remove(ParseUser.getCurrentUser().getObjectId());
myMessages.get(position).saveInBackground();
}
}
private boolean isNetworkAvailableAndConnected() {
ConnectivityManager manager = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if (info != null && info.isConnected())
return true;
else
return false;
}
@Override
public void onResume() {
super.onResume();
if (isNetworkAvailableAndConnected()) {
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
ParseConstants.KEY_MESSAGES);
query.whereEqualTo(ParseConstants.KEY_RECEPIENTSIDS, ParseUser
.getCurrentUser().getObjectId());
query.orderByDescending("createdAt");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> messages, ParseException e) {
if (e == null) {
// found messages successfully
myMessages = messages;
String[] usernames = new String[myMessages.size()];
for (int i = 0; i < messages.size(); i++) {
usernames[i] = messages.get(i).getString(
ParseConstants.KEY_SENDERNAME);
}
if (getListView().getAdapter() == null) {
MessageAdapter adapter = new MessageAdapter(
getListView().getContext(), myMessages);
setListAdapter(adapter);
} else {
// refill
((MessageAdapter) getListView().getAdapter())
.refill(myMessages);
}
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(
getListView().getContext());
builder.setMessage(R.string.messages_loading_failed);
builder.setTitle(getString(R.string.dialog_title));
builder.setPositiveButton(android.R.string.ok, null);
AlertDialog dialog = builder.create();
dialog.show();
}
}
});
} else {
Toast.makeText(getActivity(), "No internet connection",
Toast.LENGTH_LONG).show();
}
}
} 입니다 자바 코드입니다 22.444 : E는/AndroidRuntime (26541) : java.lang.IllegalStateException : 콘텐츠 볼 수 없습니다 아직 작성되지 않았습니다. 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : android.app.ListFragment.ensureList (ListFragment.java:386) 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : android.app.ListFragment.getListView (ListFragment.java:280) 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : a com.example.friendsapp.InboxFragment $ 1.done (InboxFragment.java:116) 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : com.parse.FindCallback.internalDone (FindCallback.java:45) 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : com.parse.FindCallback.internalDone (FindCallback.java:31) 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : at (Parse.java : 792) 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : -08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : android.os.Handler.dispatchMessage (Handler.java:100) 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : android. os.Looper.loop (Looper.java:194) 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : android.app.ActivityThread.main (ActivityThread.java:5371) 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : java.lang.reflect.Method.invokeNative (기본 메소드) 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : java .lang.reflect.Method.invoke (Method.java:525) 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java : 833) 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:600) 02-08 00 : 06 : 22.444 : E/AndroidRuntime (26541) : at dalvik.system.NativeStart.main (기본 메소드)
충돌을 일으키지 않고 충족 된 findInBackgound가 수행 한 작업을 수행 할 수있는 방법이 있습니까? 또는 다른 논리적 오류로 인한 충돌입니다.