【问题标题】:Error setting ListAdapter in AsyncTask在 AsyncTask 中设置 ListAdapter 时出错
【发布时间】:2015-02-05 08:21:37
【问题描述】:

这是我的 AsyncTask 类的 onPostExecute()

myNewsListView = (ListView)findViewById(R.id.newsListView);
                CustomListAdapter customListAdapter = new CustomListAdapter(values, getApplicationContext());
                myNewsListView.setAdapter(customListAdapter);

这里是 CustomListAdapter 类

public class CustomListAdapter extends BaseAdapter {

    String Title[];
    Context ctxt;
    LayoutInflater myInflater;

    public CustomListAdapter(String arr[], Context c)
    {
        Title = arr;
        ctxt = c;
        myInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return Title.length;
    }

    @Override
    public Object getItem(int i) {
        return Title[i];
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        view = myInflater.inflate(R.layout.custom_list, viewGroup);
        TextView titleText = (TextView)view.findViewById(R.id.newsTitle);
        TextView descriptionText = (TextView)view.findViewById(R.id.newsDescription);
        ImageView imageView = (ImageView)view.findViewById(R.id.newsImage);

        titleText.setText(Title[i]);

        return view;
    }
}

每次尝试在此行上设置适配器时都会出现空指针异常myNewsListView.setAdapter(customListAdapter);

这是 logCat 的输出。

FATAL EXCEPTION: main
    java.lang.NullPointerException
            at samarth.learning.http.MainActivity$MyAsyncTask.onPostExecute(MainActivity.java:674)
            at samarth.learning.http.MainActivity$MyAsyncTask.onPostExecute(MainActivity.java:374)
            at android.os.AsyncTask.finish(AsyncTask.java:631)
            at android.os.AsyncTask.access$600(AsyncTask.java:177)
            at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:213)
            at android.app.ActivityThread.main(ActivityThread.java:5225)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
            at dalvik.system.NativeStart.main(Native Method)

我做错了什么?非常感谢任何建议和帮助。

【问题讨论】:

  • 可能 myNewsListViewnull 确保您正在调用 setContentView 方法,其中 ListView 存在 newsListView id
  • 如果我注释掉myNewsListView.setAdapter(customListAdapter); 这意味着setContentView()被调用,所有运行良好。

标签: java android android-listview android-asynctask


【解决方案1】:

如果您在myNewsListView.setAdapter(customListAdapter) 上获得java.lang.NullPointerException,您的(ListView)findViewById(R.id.newsListView) 可能会变为NULL。

您应该在 AsyncTask 之外执行 myNewsListView = (ListView)findViewById(R.id.newsListView)。 延伸阅读:Can't access “findViewById” in AsyncTask

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多