Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
183 views
in Technique[技术] by (71.8m points)

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

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 ?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...