2016-01-17 2 views
0

Я пытаюсь написать приложение библиотеки. Я работаю с php и MySql.onPostExecute никогда не вызывается, но doInBackground возвращает значение

В моей 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

Возможный дубликат [Что такое исключение Null Pointer Exception и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) – 0X0nosugar

+0

Можете ли вы опубликовать код метода onCreate(). есть исключение NPE в этом методе – Pankaj

ответ

0

вам нужно назначить виды вне AsyncTask. onPostExecute вызывается после выполнения в фоновом режиме в другом потоке. До этого основной поток уже достигает линии, в которой вы назначаете OnItemClickListener. Просто переместите линии

searchView = (SearchView) findViewById(R.id.searchView); 
listView = (ListView) findViewById(R.id.listView); 

за пределами AsyncTask.

+0

Спасибо! оно работает! – Liloo

Смежные вопросы