DropboxUnlinkedException - if you have not set an access token pair on the session, or if the user has revoked access

僤鯓⒐⒋嵵緔 提交于 2019-12-12 01:53:14

问题


I am trying to upload a file to dropbox. I have configured manifest file, and written the below code. Please help me understand what I am missing here. Activity onClick

Intent uploadToDropbox = new Intent(this, SUploadDB2Dropbox.class); 
            startService(uploadToDropbox) ;

Service SUploadDB2Dropbox

private DropboxAPI<AndroidAuthSession> mDBApi;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        AppKeyPair appKeys = new AppKeyPair(God.DROPBOX_APP_KEY,
                God.DROPBOX_APP_SECRET);
        AndroidAuthSession session = new AndroidAuthSession(appKeys);
        mDBApi = new DropboxAPI<AndroidAuthSession>(session);
        mDBApi.getSession().startOAuth2Authentication(this);
        UploadDB2DropBox upload2DropBox = new UploadDB2DropBox(this, mDBApi);
        upload2DropBox.execute();
        return super.onStartCommand(intent, flags, startId);
    }

UploadDB2DropBox AsyncTask

@Override
    public String doInBackground(Object... params) {
        File file = new File(context.getDatabasePath(God.TABLE_ACTIVATIONS)
                + ".db");
        Log.d(God.TAG,
                "Database path "
                        + context.getDatabasePath(God.TABLE_ACTIVATIONS));

        FileInputStream inputStream = null;
        try {
            String newFileName;
            inputStream = new FileInputStream(file);

            newFileName = "/" + God.TABLE_ACTIVATIONS
                    + Calendar.getInstance().getTimeInMillis() + ".db";
            Log.d(God.TAG, "File path " + file.getName() + " len "
                    + inputStream.available());
            Log.d(God.TAG, " New Filename " + newFileName);
            Entry response = mDBApi.putFile(newFileName, inputStream,
                    file.length(), null, null);
            Log.d(God.TAG, "Uploaded file is " + response.rev);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            Log.e(God.TAG, "FileNotFoundException");
        } catch (DropboxException e) {
            e.printStackTrace();n
            Log.e(God.TAG, "DropboxException");
        } catch (IOException e) {
            Log.e(God.TAG, "IOException");
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    Log.e(God.TAG, "IOException");
                }
            }
        }
        return null;
    }

I am getting a dropbox exception. The screen does navigate to the dropbox Allow user screen (everytime though).

Logcat

02-23 11:44:19.435: D/AutoActivate(27289): Database path /data/data/com.swipex.autoactivate/databases/activations
02-23 11:44:19.436: D/AutoActivate(27289): File path activations.db len 8372224
02-23 11:44:19.546: D/AutoActivate(27289):  New Filename /activations1424672059436.db
02-23 11:44:19.702: E/AutoActivate(27289): DropboxException

Manifest File

<activity
            android:name="com.dropbox.client2.android.AuthActivity"
            android:configChanges="orientation|keyboard"
            android:launchMode="singleTask" >
            <intent-filter>
                <data android:scheme="db-KEY_VALUE_HERE" />

                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

I am getting a UnlinkException

DropboxUnlinkedException - if you have not set an access token pair on the session, or if the user has revoked access.

What am I missing ?


回答1:


Terrible dropbox documentation I must say

public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(God.TAG, "Initializing Dropbox");
        AppKeyPair appKeys = new AppKeyPair(God.DROPBOX_APP_KEY,
                God.DROPBOX_APP_SECRET);
        AndroidAuthSession session = new AndroidAuthSession(appKeys);
        mDBApi = new DropboxAPI<AndroidAuthSession>(session);
        mDBApi.getSession().startOAuth2Authentication(this);
        if (mDBApi != null && mDBApi.getSession().authenticationSuccessful()) {
            try {
                // Required to complete auth, sets the access token on the session
                mDBApi.getSession().finishAuthentication();
                UploadDB2DropBox upload2DropBox = new UploadDB2DropBox(this,
                        mDBApi);
                upload2DropBox.execute();

                //String accessToken = mDBApi.getSession().getOAuth2AccessToken();
            } catch (IllegalStateException e) {
                Log.i(God.TAG, "Error authenticating", e);
            }
        }
        return super.onStartCommand(intent, flags, startId);
    }

This helped. I wonder why dropbox keeps asking for permission from the UI. Its stupid to use this api if I have to keep asking for permission.



来源:https://stackoverflow.com/questions/28428719/dropboxunlinkedexception-if-you-have-not-set-an-access-token-pair-on-the-sessi

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