Dropbox 身份验证期间主要 android 发生致命异常

Fatal exception at main android during dropbox authentication

我在主空指针异常中遇到致命异常错误。基本上我有 2 个活动登录和主 activity.you 将在登录 activity 中输入应用程序密钥和应用程序密码,然后在身份验证后它将带你到主 activity 有什么帮助吗??

登录activity

public class login_activity extends AppCompatActivity {

    public String APP_kEY ;
    public String APP_SECRET;
    public String accessToken;
    EditText app_key_view;
    EditText App_secret_view;
    Button dropbox;
    public DropboxAPI<AndroidAuthSession> mDBApi;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        SharedPreferences pref = getSharedPreferences("login",MODE_PRIVATE);
        APP_kEY = pref.getString("appkey",null);
        APP_SECRET = pref.getString("appsecret",null);
        accessToken = pref.getString("access",null);
        if (accessToken != null){

            AppKeyPair appkeys = new AppKeyPair(APP_kEY,APP_SECRET);
            AndroidAuthSession session = new AndroidAuthSession(appkeys);
            session.setOAuth2AccessToken(accessToken);

            Intent i = new Intent(login_activity.this,MainActivity.class);
            startActivity(i);
            finish();
        }

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login_activity);

        app_key_view=(EditText)findViewById(R.id.app_key_text);
        App_secret_view=(EditText)findViewById(R.id.app_secret_text);
        dropbox = (Button)findViewById(R.id.link_dropbox);
        //////////////////////////////////////////////////////////////
        dropbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                APP_kEY = app_key_view.getText().toString();
                APP_SECRET = App_secret_view.getText().toString();

                AppKeyPair appKeys = new AppKeyPair(APP_kEY,APP_SECRET);
                AndroidAuthSession session = new AndroidAuthSession(appKeys);
                mDBApi = new DropboxAPI<>(session);
                mDBApi.getSession().startOAuth2Authentication(login_activity.this);


            }
        });



    }

    @Override
    protected  void onResume () {
        super.onResume();
        if(mDBApi.getSession().authenticationSuccessful()){
            try {
                mDBApi.getSession().finishAuthentication();
                accessToken = mDBApi.getSession().getOAuth2AccessToken();
                SharedPreferences.Editor editor = getSharedPreferences("login",MODE_PRIVATE).edit();
                editor.putString("appkey",APP_kEY);
                editor.putString("appsecret",APP_SECRET);
                editor.putString("access",accessToken);
                editor.commit();
                Intent i = new Intent(login_activity.this,MainActivity.class);
                startActivity(i);
                finish();
            }
            catch (IllegalStateException e){
                Log.i("DbAuthLog", "Error authenticationg", e);

            }
        }
    }

Logcat

09-11 21:06:01.947    3842-3842/? I/art﹕ Late-enabling -Xcheck:jni
09-11 21:06:01.975    3842-3851/? I/art﹕ Debugger is no longer active
09-11 21:06:02.370    3842-3857/? I/art﹕ Background sticky concurrent mark sweep GC freed 2909(253KB) AllocSpace objects, 2(32KB) LOS objects, 0% free, 50MB/50MB, paused 36.891ms total 133.660ms
09-11 21:06:02.803    3842-3842/? D/AndroidRuntime﹕ Shutting down VM
09-11 21:06:02.803    3842-3842/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.ayzaz.timescopev1.timescope, PID: 3842
    java.lang.RuntimeException: Unable to resume activity {com.example.ayzaz.timescopev1.timescope/com.example.ayzaz.timescopev1.timescope.login_activity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.dropbox.client2.session.Session com.dropbox.client2.DropboxAPI.getSession()' on a null object reference
            at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2986)
            at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3017)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
            at android.app.ActivityThread.access0(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            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:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.dropbox.client2.session.Session com.dropbox.client2.DropboxAPI.getSession()' on a null object reference
            at com.example.ayzaz.timescopev1.timescope.login_activity.onResume(login_activity.java:77)
            at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1257)
            at android.app.Activity.performResume(Activity.java:6076)
            at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2975)
            at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3017)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
            at android.app.ActivityThread.access0(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            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:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
09-11 21:06:05.849    3842-3842/com.example.ayzaz.timescopev1.timescope I/Process﹕ Sending signal. PID: 3842 SIG: 9

onResume() 总是在 onCreate() 之后被调用。

onResume() 开始时,mDBApinull,因为此字段仅在 onClick() 方法中赋值。

您要么需要直接在onCreate()中分配mDBApi,要么在尝试使用它之前先检查它不是null