Почему у меня исключение нулевого указателя при вызовах базы данных и что я могу сделать, чтобы решить?

new AsyncTask<Ticket, Void, List<TPVLine>>() {
        @Override
        protected List<TPVLine> doInBackground(Ticket... params) {
            List<TPVLine> lines;
            while (true){
                Log.d(TAG, "Waiting for data base response");
                try {
                    lines = params[0].getLines();
                    Log.d(TAG, "Data base response completed");
                    break;
                }catch (SQLiteException | NullPointerException ex){
                    ActiveAndroid.clearCache();
                    Log.d(TAG, "Cleaning cache");
                    Log.wtf(TAG, ex.toString());
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            }
            return lines;
        }

        @Override
        protected void onPostExecute(List<TPVLine> aVoid) {
            super.onPostExecute(aVoid);
            linesTPV = new ArrayList<TPVLine>();
            if (aVoid != null){
                linesTPV = aVoid;
            }
            linesTPV.addAll(noSavedLines);
            mainActivity.getTpvFragment().resetPrice();
            notifyDataSetChanged();
            if (linesTPV.size() == 0){
                mainActivity.getTpvFragment().getListContainer().setVisibility(View.INVISIBLE);
                mainActivity.getTpvFragment().getMessageContainer().setVisibility(View.VISIBLE);
            }else {
                mainActivity.getTpvFragment().getListContainer().setVisibility(View.VISIBLE);
                mainActivity.getTpvFragment().getMessageContainer().setVisibility(View.INVISIBLE);
            }
            notifyDataSetChanged();
        }
    }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, mainActivity.getCurrentTicket());

Это звонки, сначала в Ticket.java

public List<TPVLine> getLines() {
    return new Select().from(TPVLine.class).where("Ticket = ?", this.getId()).execute();
}

Второй находится в TPVLine.java

public static List<TPVLine> getLines(Ticket ticket){
    return new Select().from(TPVLine.class).where("Ticket = ?", ticket.getId()).orderBy("Id ASC").execute();
}

Проблема вызвана, когда я вызываю TPVLine.class, я сначала проверяю, что Ticket!= Null. Я использую ActiveAndroid для управления базой данных

1 ответ

Ты возвращаешься null вместо lines в твоей асинктаске doInBackground событие.

return lines;
Другие вопросы по тегам