2017-01-27 25 views
-1

我正在開發一個項目,我必須從MainActivity中的普通'app'模塊中的Android庫中啓動一個Activity。Android - NullPointerEx。由Android庫的getPackageName()引起的類

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

從 '應用程序' 的的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) 
    // ... 
+0

的你能也許** **告訴你爲什麼downvote的問題嗎?也許我們可以解決這個問題? –

+0

嘗試MainActivity.this或getContext()而不是僅在意圖 –

+0

MainActivity.this給出相同的錯誤。我不能調用_getContext()_,只能調用_getBaseContext()_和_getApplicationContext()_(並且也有相同的錯誤) –

回答

0

好吧我知道了。

問題是回調方法或成爲內側的AsyncTask更具體的。

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

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

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

這導致NullPointerException異常ContextWrapper裏面時,他試圖撥打

return mBase.getPackageName(); 

MBASE被設置爲活動上下文這是當然