![](/img/trans.png)
[英]Android - Problem getResources() and 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.