Dropbox Core API is not working. I don't want to hardcode app key and secret?

喜夏-厌秋 提交于 2019-12-02 17:40:21

问题


I am newbie. There are two activities in my app: login and main activity. I want to enter my app key and app secret in login activity, but my app isn't working. It's getting a crash. I want to start authentication process when I click a button.

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);

        }
    }
}

android manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ayzaz.timescopev1.timescope" >
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".login_activity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >

        </activity>
        <activity
            android:name="com.dropbox.client2.android.AuthActivity"
            android:launchMode="singleTask"
            android:configChanges="orientation|keyboard">
            <intent-filter>
                <!-- Change this to be db- followed by your app key -->
                <data android:scheme="db-5400mvbvj5384st" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE"/>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

    </application>

</manifest>

logcat

1633-1633/com.example.ayzaz.timescopev1.timescope I/art﹕ Late-enabling -Xcheck:jni 09-11 20:59:32.437
1633-1633/com.example.ayzaz.timescopev1.timescope D/AndroidRuntime﹕ Shutting down VM --------- beginning of crash 09-11 20:59:32.438 1633-1633/com.example.ayzaz.timescopev1.timescope E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.example.ayzaz.timescopev1.timescope, PID: 1633 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 20:59:43.201 1633-1633/com.example.ayzaz.timescopev1.timescope I/Process﹕ Sending signal. PID: 1633 SIG: 9

来源:https://stackoverflow.com/questions/32532978/dropbox-core-api-is-not-working-i-dont-want-to-hardcode-app-key-and-secret

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!