2013-11-28 3 views
0

LisFragment 및 ViewPagerIndicator와 작동하는 앱이 있습니다. 화면이 두 번 회전하면 응용 프로그램은 logcat이 첨부 된 오류를 제공합니다. 내 문제는 문맥과 관련이있는 것 같습니다 null입니다. StackOverflow에서 여러 문제를 보았지만 해결할 수 없었습니다. 내가 onAttach와 onDetach 메소드를 구현해야하지만, 시도한 것이 실패한 것 같지는 않다.AsyncTask NullPointerException 두 개가 listfragment와 함께 회전 한 후

제발 도와주세요. 나는 솔직히이 문제에 필사적이다.

감사합니다. ListFragment

public class RlsFragment extends ListFragment{ 


Activity mActivity; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // normally you should inflate a view here and save references 
// using ListFragment default layout for this example 
    return super.onCreateView(inflater, container, savedInstanceState); 
} 

@Override 
public void onStart() { 
super.onStart(); 
new CreateArrayListTaskRls().execute(); 
} 


private class CreateArrayListTaskRls extends AsyncTask<String, Void, ArrayList <ElementosList>> { 


    protected ArrayList <ElementosList> doInBackground(String...strings) 
    { 
     ArrayList <ElementosList> itemRls = new ArrayList <ElementosList>(); 
     itemRls.clear(); 
     loadDataJsonRls(); 
     for(int i=0;i<ListViewConfig.getResim_list_txt().size();i++) 
     { 
      itemRls.add(new ElementosList(ListViewConfig.getResim_list_txt().get(i), 
        ListViewConfig.getResim_list_img().get(i))); 
     }  
     return itemRls; 
    } 

    protected void onPostExecute(ArrayList <ElementosList> itemsRls) { 
     ArrayAdapter<ElementosList>adaptadorRls = new AdaptadorList(getActivity(),itemsRls); 
     setListAdapter(adaptadorRls);     
    } 

    }//fin createArraylistTask 

. 
. 
. 
. 
. 
. 

라 clase의 AdaptadorList에서 상속

내 로그 캣

11-28 08:30:18.939: E/AndroidRuntime(602): FATAL EXCEPTION: main 
11-28 08:30:18.939: E/AndroidRuntime(602): java.lang.NullPointerException 
11-28 08:30:18.939: E/AndroidRuntime(602): at android.widget.ArrayAdapter.init(ArrayAdapter.java:271) 
11-28 08:30:18.939: E/AndroidRuntime(602): at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:150) 
11-28 08:30:18.939: E/AndroidRuntime(602): at es.app.adeptlabel.AdaptadorList.<init>(AdaptadorList.java:27) 
11-28 08:30:18.939: E/AndroidRuntime(602): at es.app.adeptlabel.ArtFragment$CreateArrayListTaskArt.onPostExecute(ArtFragment.java:63) 
11-28 08:30:18.939: E/AndroidRuntime(602): at es.app.adeptlabel.ArtFragment$CreateArrayListTaskArt.onPostExecute(ArtFragment.java:1) 
11-28 08:30:18.939: E/AndroidRuntime(602): at android.os.AsyncTask.finish(AsyncTask.java:417) 
11-28 08:30:18.939: E/AndroidRuntime(602): at android.os.AsyncTask.access$300(AsyncTask.java:127) 
11-28 08:30:18.939: E/AndroidRuntime(602): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 
11-28 08:30:18.939: E/AndroidRuntime(602): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-28 08:30:18.939: E/AndroidRuntime(602): at android.os.Looper.loop(Looper.java:123) 
11-28 08:30:18.939: E/AndroidRuntime(602): at android.app.ActivityThread.main(ActivityThread.java:3683) 
11-28 08:30:18.939: E/AndroidRuntime(602): at java.lang.reflect.Method.invokeNative(Native Method) 
11-28 08:30:18.939: E/AndroidRuntime(602): at java.lang.reflect.Method.invoke(Method.java:507) 
11-28 08:30:18.939: E/AndroidRuntime(602): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
11-28 08:30:18.939: E/AndroidRuntime(602): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
11-28 08:30:18.939: E/AndroidRuntime(602): at dalvik.system.NativeStart.main(Native Method) 
11-28 08:30:19.099: E/Buffer Error(602): Error converting result java.io.IOException: Attempted read on closed stream. 

내 클래스는

+0

닫힌 스트림에서 읽으려고했습니다. 닫힌 스트림을 읽으려고합니다 (아마도 JSON을 서버에서 읽을 때). – Sajmon

+0

오류가 postexecute()에 있습니다. 디버그하여 null이 무엇인지 확인하십시오. 아무것도 수행하기 전에 null이 아닌지 확인하십시오. –

답변

0

이 조각과 AsyncTask를의 일반적인 문제입니다. 그것은 AsyncTask가 순간적으로 작업을 완료하면 조각의 뷰가 존재하지 않기 때문에 발생합니다. 조각과 함께 AsyncTask를 사용하면 항상 조각의보기를 사용할 수 있는지 확인하십시오. 더 좋은 방법은 로더를 사용하는 것입니다.

이 코드를 고칠 수 :

private class CreateArrayListTaskRls extends AsyncTask<String, Void, ArrayList <ElementosList>> { 


protected ArrayList <ElementosList> doInBackground(String...strings) 
{ 
    ArrayList <ElementosList> itemRls = new ArrayList <ElementosList>(); 
    itemRls.clear(); 
    loadDataJsonRls(); 
    for(int i=0;i<ListViewConfig.getResim_list_txt().size();i++) 
    { 
     itemRls.add(new ElementosList(ListViewConfig.getResim_list_txt().get(i), 
       ListViewConfig.getResim_list_img().get(i))); 
    }  
    return itemRls; 
} 

protected void onPostExecute(ArrayList <ElementosList> itemsRls) { 
    ArrayAdapter<ElementosList>adaptadorRls = new AdaptadorList(getActivity(),itemsRls); 
    if (getListView() != null) {   
     setListAdapter(adaptadorRls);     
    } 
} 

}//fin createArraylistTask 
+0

listview는 어떻게 호출합니까? 나는 그것을 레이아웃에 물리적으로 가지고 있지 않습니다. Thanks – Garmael

+0

죄송합니다. ListFragment를 사용하므로 getListView()로 변경됩니다. – Oknesif

+0

문제는 화면이 두 번 회전 할 때 Context가 null이라는 것입니다. 도움 Oknesif 주셔서 감사합니다. – Garmael

0

해결 방법 : 모든 사람에게

protected void onPostExecute(ArrayList <ElementosList> itemsRls) { 
    if (getListView() != null) { ArrayAdapter<ElementosList>adaptadorRls = new AdaptadorList(getActivity(),itemsRls);   
    setListAdapter(adaptadorRls);     
} 
} 

감사합니다. 감사합니다 Oknesif.

관련 문제