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

时间:2015-09-12 01:20:35

标签: java android nullpointerexception dropbox-api

我在主nullpointer异常时遇到致命异常错误。基本上我有2个活动登录和主要活动。你将在登录活动中输入app key和app secret然后在认证后它将带你到主活动任何帮助?

登录活动

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.access$800(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.access$800(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

1 个答案:

答案 0 :(得分:0)

总是在getline(cin,*(employees[i].children[j].name)); 之后调用{p> onResume()

onCreate()开始时,onResume()mDBApi,因为此字段仅在null方法中分配。

您需要直接在onClick()分配mDBApi,或者在尝试使用之前需要检查它是否为onCreate()