簡體   English   中英

AsyncTask NullPointerException兩個后與listfragment旋轉

[英]AsyncTask NullPointerException after two rotates with listfragment

我有一個與LisFragment和ViewPagerIndicator一起使用的應用程序。 當屏幕旋轉兩次時,應用程序會給出logcat附加的錯誤。 我的問題似乎與上下文為空有關。 我在StackOverflow上看到了幾個問題,但沒有設法解決。 似乎我必須實現onAttach和onDetach方法,但並不是像我嘗試的那樣失敗。

請你幫我一下。 坦率地說,我對這個問題感到絕望。

謝謝。

我的LogCat

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.

我的類繼承自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

.
.
.
.
.
.

La clase AdaptadorList

public class AdaptadorList extends ArrayAdapter<ElementosList> {

Activity contexto;
private ArrayList<ElementosList> elementos;

AdaptadorList(Activity contexto, ArrayList<ElementosList> elementos)
{       
    super(contexto,R.layout.opciones,elementos);
    this.elementos = elementos;
    this.contexto = contexto;
}

public View getView(int position, View convertView, ViewGroup parent )
{
    View item = convertView;
    final VistaTag vistaTag;
    if(item==null)
    {
        LayoutInflater inflater = contexto.getLayoutInflater();
        item = inflater.inflate(R.layout.opciones, null);
        vistaTag = new VistaTag();
        vistaTag.titulo = (TextView)item.findViewById(R.id.textView1);
        vistaTag.imgadpt = (ImageView)item.findViewById(R.id.imageView1);
        item.setTag(vistaTag);          
    }
    else
    {
        vistaTag = (VistaTag)item.getTag();
    }
    //Aplicacion fuente verdana
    Typeface verdana = Typeface.createFromAsset(contexto.getAssets(), "verdana.ttf");

    vistaTag.titulo.setText(elementos.get(position).getTitulo());
    vistaTag.titulo.setTypeface(verdana);
    vistaTag.imgadpt.setImageBitmap(getBitmapFromURL(elementos.get(position).getImagen()));

    return(item);

}//fin getView

這是片段和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

解:

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

謝謝大家。 感謝Oknesif。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM