我尝试编写一个库应用程序。我使用php和MySql。
在我的mainACtivity中,我调用返回3个列表的函数:书籍,购物车和订单。第一个是满的,但购物车和订单是空的。这些函数在myAsyncTask中调用。
new AsyncTask<Void, Void, ArrayList<Book>>() {
@Override
protected void onPreExecute() {
}
@Override
protected ArrayList<Book> doInBackground(Void... voids) {
listBook = backend.getBookInStock();
billForMember = backend.getBillForMember(member.getMemberID());
cart = backend.getCart(member.getMemberID());
return listBook;
}
@Override
protected void onPostExecute( ArrayList<Book> list) {
searchView = (SearchView) findViewById(R.id.searchView);
listView = (ListView) findViewById(R.id.listView);
bookAdapter = new BookAdapter(CrownLibrary.this, listBook, AccessType.DIRECTOR, SearchType.BOOK_IN_STOCK, 0);
bookAdapter.addListener(CrownLibrary.this);
listView.setAdapter(bookAdapter);
}
}.execute();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(CrownLibrary.this, CrownLibraryDetails.class);
intent.putExtra(IntentExtra.BOOK.toString(), bookAdapter.getItem(i));
intent.putExtra(IntentExtra.MEMBER.toString(), member);
startActivity(intent);
}
});
当我调试我的应用程序时,该函数调用这3个函数,并初始化它们。但是在doInBackground之后,应用程序没有实现onPOstExecute。我知道这一点,因为listView(在onPostExecute中)从未被初始化并且应用程序停止。
01-17 17:28:25.956 8002-8002/com.example.lilo.ebookstore E/AndroidRuntime: Caused by: java.lang.NullPointerException
01-17 17:28:25.956 8002-8002/com.example.lilo.ebookstore E/AndroidRuntime: at com.example.lilo.ebookstore.CrownLibrary.onCreate(CrownLibrary.java:94)
我什么都不知道。
答案 0 :(得分:0)
您需要在AsyncTask之外分配视图。在后台执行do后,在另一个线程上调用onPostExecute。在此之前,主线程已到达您分配OnItemClickListener的行。只需移动线
searchView = (SearchView) findViewById(R.id.searchView);
listView = (ListView) findViewById(R.id.listView);
在AsyncTask之外。