我想做的就是调用此方法从MainActivity启动意图,并且不断得到:
java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String android.content.Context.getPackageName()'在null上对象参考
我假设的问题是在某个时候传递上下文,但是我看不到如何正确设置。
public class Manager extends AppCompatActivity implements Serializable {
public void startUpdatingSensors(){
//Start sensor service
/*-->Here*/ Intent startService = new Intent(this, SensorService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(startService);
} else {
startService(startService);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_trace_manager);
}
}
从Main称为:
public class MainActivity extends AppCompatActivity {
public static final String TAG = "Main";
private Manager Manager = new TraceManager(this);
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//initialise trace
Manager.startUpdatingSensors();
Manager.startUpdatingLocation();
Manager.startUpdatingTrace();
//get permissions for location
Dexter.withActivity(this)
.withPermissions(Arrays.asList(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
))
.withListener(new MultiplePermissionsListener() {
@Override
public void onPermissionsChecked(MultiplePermissionsReport multiplePermissionsReport) {
Manager.startUpdatingSensors();
Manager.startUpdatingLocation();
Manager.startUpdatingTrace();
}
@Override
public void onPermissionRationaleShouldBeShown(List<PermissionRequest> list, PermissionToken permissionToken) {
}
});
}
}
我曾尝试传递各种上下文和活动对象,但无法使其正常工作。
完整的堆栈跟踪:
Process: com.app.android, PID: 11760 java.lang.RuntimeException:
Unable to start activity ComponentInfo{com.app.android/com.app.android.MainActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ContextWrapper.getPackageName(ContextWrapper.java:145)
at android.content.ComponentName.(ComponentName.java:131)
at android.content.Intent.(Intent.java:6513)
at com.app.android.Manager.startUpdatingSensors(Manager.java:187)
at com.app.android.MainActivity.onCreate(MainActivity.java:76)
在Manager中为187的行是:
Intent startService = new Intent(this, SensorService.class);
更改下一行: