尝试在空对象引用调用虚拟方法android.content.pm.PackageManager android.content.Context.getPackageManager()'
问题描述:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
这是即使我从来没有使用getPackageManager()
我收到错误方法。尝试在空对象引用调用虚拟方法android.content.pm.PackageManager android.content.Context.getPackageManager()'
以下是我的代码:
AppUtils.java:
public static boolean checkPlayServices() {
int resultCode = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(mContext);
if (resultCode != ConnectionResult.SUCCESS) {
if (GoogleApiAvailability.getInstance().isUserResolvableError(resultCode)) {
GoogleApiAvailability.getInstance().getErrorDialog((Activity) mContext, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST);
} else {
Toast.makeText(mContext, "This Device is not Supported!", Toast.LENGTH_LONG).show();
}
return false;
}
return true;
}
MyUtils.java:
@Override
protected void onResume() {
super.onResume();
utils.checkPlayServices();
}
登录猫错误:
11-18 12:32:07.705 21076-21076/com.vtrak E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.vtrak, PID: 21076
java.lang.RuntimeException: Unable to resume activity {com.vtrak/com.vtrak.Activities.HomeActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3334)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3365)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2690)
at android.app.ActivityThread.access$900(ActivityThread.java:188)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1530)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:210)
at android.app.ActivityThread.main(ActivityThread.java:5839)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1113)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:879)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
at com.google.android.gms.common.zze.isGooglePlayServicesAvailable(Unknown Source)
at com.google.android.gms.common.zzc.isGooglePlayServicesAvailable(Unknown Source)
at com.google.android.gms.common.GoogleApiAvailability.isGooglePlayServicesAvailable(Unknown Source)
at com.vtrak.Classes.Utils.checkPlayServices(Utils.java:92)
at com.vtrak.Activities.HomeActivity.onResume(HomeActivity.java:66)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1267)
at android.app.Activity.performResume(Activity.java:6263)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3319)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3365)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2690)
at android.app.ActivityThread.access$900(ActivityThread.java:188)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1530)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:210)
at android.app.ActivityThread.main(ActivityThread.java:5839)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1113)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:879)
我得到这个错误当调用此方法时,我不明白为什么我的应用程序崩溃此方法无关checkplayServices()方法:
private void getHistory() {
/*String assetNo = null;
Bundle bun = getIntent().getExtras();
if (bun != null) {
assetNo = bun.getString(RecyclerAdapter.KEY_VEH_NUM, null);
}*/
String startDate = tvDate.getText() + " " + tvStartTime.getText();
String endDate = tvDate.getText() + " " + tvEndTime.getText();
Call<ModelHistory> call = Utils.retroInterface.getHistory("SG00iX", "Android", Integer.parseInt(LogInActivity.sharedPreferences.getString(LogInActivity.KEY_RESULT_MSG, null)), "GBE8185Y", startDate, endDate);
call.enqueue(new Callback<ModelHistory>() {
@Override
public void onResponse(Call<ModelHistory> call, Response<ModelHistory> response) {
for (int i = 0; i < response.body().getData().size(); i++) {
Log.i("lat long : ", response.body().getData().get(i).getLocLat() + " " + response.body().getData().get(i).getLocLon());
listLat.add(Double.valueOf(response.body().getData().get(i).getLocLat()));
listLat.add(Double.valueOf(response.body().getData().get(i).getLocLon()));
}
showInMap(listLat, listLong);
}
@Override
public void onFailure(Call<ModelHistory> call, Throwable t) {
Log.i("no, ", "its failure" + t.toString());
}
});
}
编辑:
得到的答案终于,列出未初始化,初始化他们像对此,解决的问题:
listLat = new ArrayList<Double>;
listLon = new ArrayList<Double>;
答
Alright I didn't initialize utils at first, I was not not supposed to initialize it, its static method I can use directly.
比通过Context
在checkPlayServices
如下面的代码
试试这个
public static boolean checkPlayServices(Context mContext) {
int resultCode = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(mContext);
if (resultCode != ConnectionResult.SUCCESS) {
if (GoogleApiAvailability.getInstance().isUserResolvableError(resultCode)) {
GoogleApiAvailability.getInstance().getErrorDialog((Activity) context, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST);
} else {
Toast.makeText(mContext, "This Device is not Supported!", Toast.LENGTH_LONG).show();
}
return false;
}
return true;
}
比调用此方法像这样
@Override
protected void onResume() {
super.onResume();
AppUtils.checkPlayServices(YourActivity.this);
}
你在哪里初始化'utils' ? –
可能是**'mContext' **为空 – Prem
好吧,我没有先初始化utils的,我是不是不应该对其进行初始化,它的静态方法我可以直接使用。 –