2017-01-27 2 views
-1

Ich arbeite an einem Projekt, wo ich eine Aktivität in einer Android-Bibliothek von der MainActivity in der normalen 'App' Modul starten muss.Android - NullPointerEx. verursacht durch getPackageName() aus Android-Bibliothek Klasse

Die MainActivity sieht wie folgt aus:

public class MainActivity extends ActionBarActivity implements BackendResponse { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

// Here I start an AsyncTask 
public void tellJoke(View view) { 
    BackendConnector backendConnector = new BackendConnector(); 
    backendConnector.execute(); 
} 

// And here is the Callback 
@Override 
public void response(String joke) { 
    /* 
     Down here is the problematic line (PresenterActivity is imported) 
    */ 
    Intent jokeIntent = new Intent(this, PresenterActivity.class); // <--- line 18 
    if (joke == null) joke = getString(R.string.emergency_joke); 

    jokeIntent.putExtra(getString(R.string.intent_key), joke); 

    startActivity(jokeIntent); 
} 

Im build.gradle Datei aus dem 'App' Modul die Abhängigkeit

android { 
    // compileSdkVersion etc 
} 
dependency { 
    compile project(':jokepresenter') // <--- 
} 

gesetzt ist und in der settings.gradle Datei aus dem gesamten Projekt ist die Bibliothek enthalten

include ':app', ':jokepresenter' 

Die Logcat sagt wie folgt:

FATAL EXCEPTION: main 
    Process: com.udacity.gradle.builditbigger, PID: 2723 
    java.lang.NullPointerException: 
    Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 
    // ... 
    at com.udacity.gradle.builditbigger.MainActivity.response(MainActivity.java:18) 
    at com.udacity.gradle.builditbigger.BackendConnector.onPostExecute(BackendConnector.java:53) 
    at com.udacity.gradle.builditbigger.BackendConnector.onPostExecute(BackendConnector.java:17) 
    // ... 
+0

Könnten Sie vielleicht war natürlich ** sagen **, warum Sie die Frage downvote? Vielleicht könnten wir das Problem lösen? –

+0

versuchen MainActivity.this oder getContext() statt nur in Absicht –

+0

MainActivity.this gibt denselben Fehler. Und ich kann nicht _getContext() _, nur _getBaseContext() _ und _getApplicationContext() _ aufrufen (und es gibt auch denselben Fehler) –

Antwort

0

Ok, ich habe es.

Das Problem war die Callback-Methode oder genauer in der AsyncTask.

@Override 
protected void onPostExecute(String joke) { 
    response = new MainActivity(); // <--- ¯\_(ツ)_/¯ 
    response.response(joke); 
} 

Weil ich eine neue MainActivity geschaffen war es kein Context vertreten durch diese:

Intent jokeIntent = new Intent(this, PresenterActivity.class); 

, die zu einem Nullpointer führen innerhalb des ContextWrapper, als er versuchte

anrufen
return mBase.getPackageName(); 

MBASE wurde als Aktivität Kontext gesetzt, die null

Verwandte Themen