2015-01-20 1 views
0

이상한 오류가 발생했습니다. 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가 수행 한 작업을 수행 할 수있는 방법이 있습니까? 또는 다른 논리적 오류로 인한 충돌입니다.

답변

1

DDMS 창에서 장치를 선택하고 모든 메시지를 선택했는지 또는 저장된 필터 세그먼트에 원하는 것을 파생 시켰는지 확인하십시오. 사물을 걸러 내고 싶지 않은 경우 위의 검색 필드에 아무 것도 입력하지 마십시오. 기기를 분리하고 다시 연결하면 가끔 기기를 수리하는 경향이 있습니다.

이번이 처음이라면 설정 내에서 USB 디버깅을 켜서 장치와 통신 할 수 있어야합니다. 먼저 개발자 옵션을 켜서 조사 할 수 있습니다.

0

블로그에서 답을 발견했습니다. 대화 상자를 표시하기 전에

if(getActivity() != null) 

을 사용해야합니다. 모두에게 감사드립니다.

관련 문제