Android [Änfänger] Void aus AsyncTask aufrufen

BigRavler

Mitglied
Guten Tag,

Ich besitzte eine Async Klasse welche eine SQLITE Datei runterläd, diese soll an mehreren stellen des Programms immer auf die selbe Weiße NEU ausgelesen werden, deshalb habe ich mir einen neuen Void in der MainActivity erstellt (loaddata).
diesen wollte ich jetzt in onPostExecute des AsyncTask folgendermaßen ausführen:
Java:
MainActivity kk = new MainActivity();
kk.loaddata();

dabei bekomm ich aber im Folgenden Fehler:
Code:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
bzw.
Code:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getFilesDir()' on a null object reference

Wenn der selbe loaddata Void direkt aus der MainActivity aufgerufen wird läuft er ohne Probleme :(



loaddata:
Java:
public void loaddata(){
SQLiteDatabase mydatabase = SQLiteDatabase.openOrCreateDatabase( getFilesDir()+ "/matches.db", null);
Cursor resultSet = mydatabase.rawQuery("SELECT * FROM Matches WHERE Datum >= CURRENT_TIMESTAMP ORDER BY Datum LIMIT 1", null);
resultSet.moveToFirst();
TextView test = (TextView) findViewById(R.id.textView7);
test.setText("Gegner: " + resultSet.getString(0)+ " Datum: "+ resultSet.getString(2) );
 }
 

RelaX

Aktives Mitglied
Du ruft ja im AsyncTask den Konstuktor der Activity auf und möchtest diese eigentlich starten, ist das richtig so? Falls ja dann musst du die Activity richtig starten.

Intent i = new Intent(context, MainActivity.class);
activity.startActivity(i);
 
Zuletzt bearbeitet:

BigRavler

Mitglied
Vielen Dank für deine Antwort,
ich hätte aber dazu noch ein paar Fragen :oops:
-um was handelt es sich bei context ? bzw. Wie muss ich das richtig deklarieren damit es in meinem Code auch läuft ?
-und wie komm ich jetzt von der Main Activity zu loaddata welche in der MainActivity liegt ?
Das sind wahrscheinlich ganz Elementare Java Basic Fragen, allerdings arbeite ich mich gerade erst in Java hinein ...
 

dzim

Top Contributor
Vereinfacht ausgedrückt ist der (oberste) Context (ist eine Hirarchie) generell die Applikation an sich, im speziellen aber meist eine Oberfläche (konkrekt: eine Aktivity). Was du in deinem AsyncTask übergeben musst, wenn du ihn initialisierst, ist z.b. eine Referez auf die Aktivity, die ihn startet. In einer Activity selbst via "this", in Fragmenten via #getActivity()...

Wie Relax schon sagte: Activities werden nie durch dich im Code initialisiert (im Sinne von deren Kontruktor), dafür gibt es die #onCreate- (und #onResume-) Methoden. Aber ich denke nicht, dass du per Intent eine neue starten möchtest, wie Relax es zeigt, sondern auf der aktuellen etwas verändern möchtest. Daher: dem AsyncTask eine Referenz auf deine Activty mitgeben.

Im übrigen wird in der JavaDoc von Goolge eigentlich hinreichend erklärt, was genau der Kontext ist. Lies dir das am Besten mal rasch durch. Die erklären das sicher besser als ich :)
 

Ähnliche Java Themen


Oben