【问题标题】:NullPointerException when setAdapter ListView in onPostExcute在 onPostExcute 中设置适配器 ListView 时出现 NullPointerException
【发布时间】:2015-09-19 09:59:51
【问题描述】:

我创建一个ListView 并在滚动到最后一项时设置动作 loadmore。 ListView 一直有效,直到我滚动到最后一项,然后操作 loadmore ListView 运行。我收到了这个错误:

07-01 22:48:10.792: E/AndroidRuntime(4691): java.lang.NullPointerException
07-01 22:48:10.792: E/AndroidRuntime(4691):     at android.widget.ListView.clearRecycledState(ListView.java:516)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at android.widget.ListView.resetList(ListView.java:503)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at android.widget.ListView.setAdapter(ListView.java:445)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at com.example.MainActivity$1ProcessDataTask.onPostExecute(MainActivity.java:192)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at com.example.MainActivity$1ProcessDataTask.onPostExecute(MainActivity.java:1)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at android.os.AsyncTask.finish(AsyncTask.java:631)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at android.os.Looper.loop(Looper.java:137)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at android.app.ActivityThread.main(ActivityThread.java:5103)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at java.lang.reflect.Method.invokeNative(Native Method)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at java.lang.reflect.Method.invoke(Method.java:525)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-01 22:48:10.792: E/AndroidRuntime(4691):     at dalvik.system.NativeStart.main(Native Method)

NullPointException 我在onPostExcute 方法中进入listView.setAdapter(adapter);,在AsyncTask 中。

这是我的课:

public class MainActivity extends ActionBarActivity {

    List<Person> listData;
    ListView listView;
    CustomAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.person_layout);

        listView = (ListView) findViewById(R.id.list_view_person);
        listView.setDivider(null);
        listData = new ArrayList<Person>();

        processData();

        listView.setOnScrollListener(new OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {

            }
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
                    int totalItemCount) {
                if(totalItemCount > 0 && firstVisibleItem + visibleItemCount == totalItemCount) {
                    processData();
                }
            }
        });
    }

    public void processData(){
        class ProcessDataTask extends AsyncTask<Void, Void, String> {

            public ProcessDataTask() {
                super(); 
            }

            @Override
                protected String doInBackground(Void... params) {
                    .........//add data to listData here
                        return null;
                }

            @Override
                protected void onPostExecute(String result) {


                    if(listData.size() > 0){

                        adapter = new CustomAdapter(listData, MainActivity.this);

                        if(listView != null && adapter != null)
                            listView.setAdapter(adapter);

                    }

                    super.onPostExecute(result);
                }
        }
        ProcessDataTask processData = new ProcessDataTask();
        processData.execute();
    }

}

有什么建议可以解决我的错误吗?

【问题讨论】:

  • 在哪里调用 addHeaderView 或 addFooterView 方法?
  • adapter = new CustomAdapter(listData, MainActivity.this); 这里应该是adapter = new CustomAdapter(MainActivity.this, listData);
  • new CustomAdapter(listData, MainActivity.this);new CustomAdapter(MainActivity.this, listData); 在适配器 CustomAdapter 中是 Constructor。我的Constructorpublic customAdapter(List&lt;Person&gt; list, Context context)。所以我的代码的初始化是真的;

标签: android android-listview adapter android-adapter android-actionbaractivity


【解决方案1】:

你忘了ArrayList初始化...添加这段代码

listData = new ArrayList<Person>();
processData();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多