Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
即使我从未使用 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();
}
记录cat错误:
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>;
答案 0 :(得分:1)
好吧,我最初没有初始化utils,我不应该初始化它,我可以直接使用它的静态方法。
在 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);
}