2016-05-18 9 views
-1
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()); 

Das sind die Anrufe zuerst in Ticket.javaWarum habe ich eine Nullzeiger-Ausnahme bei Datenbankaufrufen und was kann ich tun, um zu lösen?

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

Der zweite in TPVLine.java

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

Das Problem verursacht ist, wenn ich TPVLine.class nennen, stelle ich sicher, Zuerst das Ticket! = null. Ich benutze ActiveAndroid, um die Datenbank zu verwalten

+0

Haben Sie die Anleitung gelesen: https://developer.android.com/reference/android/os/AsyncTask.html? Denn wenn ich Ihren Code richtig gelesen habe, ist 'params [0]' offensichtlich 'null' –

+0

Mögliches Duplikat von [Was ist eine Null-Zeiger-Ausnahme und wie behebe ich sie?] (Http://stackoverflow.com/questions/ 218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) –

+0

Das Problem ist nicht params [0], ich gebe ein Ticket und es ist null. Das Problem ist eine Null-Zeiger-Ausnahme verursacht durch Aufruf der Methode .getClass() auf ein Null-Objekt, und ich verwende nur die .class oder .getClass() in Datenbankaufrufen –

Antwort

1

Sie geben null statt lines in Ihrem asynctask doInBackground Ereignis zurück.

return lines; 
+0

Das würde nicht verursachen eine NPE mit geposteten Code, aber das ist ein guter Fang –

+0

Danke, ich habe diesen Fehler nicht beobachtet. Any wie, ist nicht das Problem der NullPointer-Ausnahme, weil ich überprüfe, ob die Rückgabe Null ist, bevor Sie sie verwenden. –

+0

nein Sie müssen Rückgabewert in Ihrem Fall ist es Arraylist Linie, so wird es in onPostExecute behandeln. – KDeogharkar

Verwandte Themen