簡體   English   中英

Android - NullPointerEx。 由 Android 庫類中的 getPackageName() 引起

[英]Android - NullPointerEx. caused by getPackageName() from Android Library Class

我正在開發一個項目,我必須從普通“應用程序”模塊中的 MainActivity 在 Android 庫中啟動一個 Activity。

MainActivity 看起來像這樣:

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);
}

在“app”模塊的build.gradle文件中,設置了依賴項

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

並且在整個項目的settings.gradle文件中包含了該庫

include ':app', ':jokepresenter'

Logcat說如下:

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)
    // ...

好,我知道了。

問題是回調方法,或者在 AsyncTask 中更具體。

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

因為我創建了一個新的 MainActivity沒有這個表示的上下文

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

當他嘗試調用時,這會導致ContextWrapper 中出現NullPointerException

return mBase.getPackageName(); 

mBase被設置為 Activity Context 這當然是null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM