上下文问题导致Context.getPackageName()上出现NullPointerException

问题描述 投票:0回答:1

我想做的就是调用此方法从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);
java android android-intent android-service android-context
1个回答
0
投票

更改下一行:

© www.soinside.com 2019 - 2024. All rights reserved.