We’re Still Here to Help (Even Over the Holidays!) - find out more here.
Forum Discussion
Andre_LB
8 years agoExplorer | Level 3
v2 API
Hi Dropbox Team, I am trying, using Dropbox API, to access my files in Dropbox. I have already done it with Dropbox API v1 and now I would like to do it with v2. For this reason, I performed as fo...
Greg-DB
Dropbox Community Moderator
8 years agoIf you're just trying to run the Android example app as is, you don't need to run gradlew.bat. You can just switch the Dropbox dependency to "compile 'com.dropbox.core:dropbox-core-sdk:3.0.6'" as you mentioned. (You should use that instead of the existing "compile group: 'com.dropbox.core', name: 'dropbox-core-sdk', version: '0-SNAPSHOT', changing: true".)
Anyway, I don't see a reference to "org.grangle.loading.StyledTextOutput" in the Android example app. Is that the exact output you're getting?
The com.android.support dependencies are referencing the Android support library. That should already be available, but refer to the Android documentation there if not.
Finally, when registering your API app on the Dropbox App Console, you should supply the name of your app that should be presented to your users, e.g., what they would see on the Google Play Store (not "UserActivity").
- Andre_LB8 years agoExplorer | Level 3
Hi Greg,
thanks for your very prompt reply.
Yes, when in Android Studio I execute "Sync Project with Gradle Files", I have this "Gradle Sync Issue":-
Unable to load class 'org.grangle.loading.StyledTextOutput'
Possible causes for this unexpected error include:
* Gradle's dependency cache may be corrupt (this sometimes occur after a network connection timeout)
* The state of a Gradle build process (daemon) may be corrupt.
Stopping all Gradle daemons may solve this problem.
* Your project may be using a third-part plugin which is not compatiblewith the other plugins in the project or the version of Gradle requested by the project.
But for being honest, this is not the only issue.
I mean, in the old Dropbox example (DBRoulette) it was clear its pourpose.
There was a download example and an upload one.
Also, working these two examples, it has been easy to use them.
Now, it is not clear for me what I have to use for authentication, for downloading and for uploading.
It is not clear for me, which example I have to run.
Now it is not working, but when it works, it is not clear which code I will have to use.Maybe I lost some important information.
Is there documentation explaining this?Thanks, again!
Andre- Greg-DB8 years ago
Dropbox Community Moderator
Thanks for the additional information. Unfortunately since that error isn't referencing Dropbox, I'm afraid I can't be of much help with that specifically. I recommend working through the list of potential causes it cites.
Anyway, thanks for the feedback. I understand how the Android example could certainly use more detailed documentation. For reference, to set up an app to use the SDK like the sample app does:
- Your AndroidManifest.xml should be set up as shown here.
- You start the flow by calling startOAuth2Authentication as shown here.
- You complete the flow by calling getOAuth2Token as shown here.
- Your app can store and re-use the resulting access token for that user, as the example does here.
- Once you have an access token, you can make a client as shown here.
- With a client, you can make whatever calls you want. The different pieces of functionality in the Android sample are broken out in different files listed here.
- Andre_LB8 years agoExplorer | Level 3
Hi Greg,
thanks again for your prompt reply.I tried to remove the Sync error but I have not been able.
You are saying that this error is not referencing Dropbox (and for this reason it is difficult for you to help me).
But my feeling is that this error is releted the downloaded codes and settings.
For this reason I am not able to fix it.
So I abandoned this way.
---------------------------------------
Now I am straight using my app.
1) I updated my AndroidManifest.xml as you suggested.
Please, note that I do not have the "OpenWithActivity" activity section in it.2) I call the authentication.
For this reason, in a class (className) I added (conditioned to a botton) the following call:-
Auth.startOAuth2Authentication(className.this, ACCESS_KEY_NAME);ACCESS_KEY_NAME is, of course, my personal key.
3) For completing the flow, as you suggested, I added the onResume method for calling getOAuth2Token.
Please, note that I took the onResume method from DropboxActivity class
(not from UserActivity one).4) Since I have got an error for "initAndLoadData" missing, I commented these two calls.
I run this app and the result is:-
Unfortunately, className has stoppedWell, I really hope that you could help me.
I do not hide you that I am losing any hope.
Thank you very much, in advance,
Andre- chirstius8 years ago
Dropbox Staff
Hello Andre_LB,
I think it would be very helpful for you to post some actual code samples of your Activities/Classes at this point rather than just describing the process.
This would help replicate the issue or at least make it easier to potentially identify issues with the authorization flow.
Would you be able to provide your manifest.xml and any relevant classes - properly sanitized of keys/tokens/etc. - for review?
Thanks,
-Chuck
- Andre_LB8 years agoExplorer | Level 3
Hi Chuck,
thank you very much for your reply and suggestion.In the mean time, there have been a few progresses. With the attached code, I am able to start and complete the flow. Also, to store and re-use the resulting access token.
It seems to me have obtained an access token but I am not able to make a client.Indeed, when I add the "requestConfig" setting I have the following error:-
error: cannot access OkHttpClient
class file for okhttp3.OkHttpClient not found
I hope that this time to be easer for you to help me.
But I have another issue.
When I'll have made a client, it is still not clear how may I use it.
I mean, I would like to download/upload a file from/to a Dropbox folder of mine.
Well, how can I perform it?Thank you very much, in advance.
Kind Regards,
Andrepublic class PrvDef extends AppCompatActivity {
private static DbxClientV2 sDbxClient;
public Button auth_but;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_prv_def);
auth_but = (Button) findViewById(R.id.login_button);
auth_but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Auth.startOAuth2Authentication(PrvDef.this, getString(R.string.app_key));
}
});
}
@Override
protected void onResume() {
super.onResume();
if (hasToken()) {
findViewById(R.id.login_button).setVisibility(View.GONE);
findViewById(R.id.email_text).setVisibility(View.VISIBLE);
findViewById(R.id.name_text).setVisibility(View.VISIBLE);
findViewById(R.id.type_text).setVisibility(View.VISIBLE);
findViewById(R.id.files_button).setEnabled(true);
findViewById(R.id.open_with).setEnabled(true);
} else {
findViewById(R.id.login_button).setVisibility(View.VISIBLE);
findViewById(R.id.email_text).setVisibility(View.GONE);
findViewById(R.id.name_text).setVisibility(View.GONE);
findViewById(R.id.type_text).setVisibility(View.GONE);
findViewById(R.id.files_button).setEnabled(false);
findViewById(R.id.open_with).setEnabled(false);
}
}
protected boolean hasToken() {
SharedPreferences prefs = getSharedPreferences("dropbox-sample", MODE_PRIVATE);
String accessToken = prefs.getString("access-token", null);
if (accessToken == null) {
accessToken = Auth.getOAuth2Token();
if (accessToken != null) {
prefs.edit().putString("access-token", accessToken).apply();
}
}
//-- requestConfig setting --------------------------------------------------------
DbxRequestConfig requestConfig = DbxRequestConfig.newBuilder("examples-v2-demo")
.withHttpRequestor(new OkHttp3Requestor(OkHttp3Requestor.defaultOkHttpClient()))
.build();
sDbxClient = new DbxClientV2(requestConfig, accessToken);
return accessToken != null;
}
}========================= Manifest =====================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.rram.prvdef">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".PrvDef">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.dropbox.core.android.AuthActivity"
android:configChanges="orientation|keyboard"
android:launchMode="singleTask">
<intent-filter>
<!-- Change this to be db- followed by your app key -->
<data android:scheme="db-..my app key ..." />
<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>
About Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.
The Dropbox Community team is active from Monday to Friday. We try to respond to you as soon as we can, usually within 2 hours.
If you need more help you can view your support options (expected response time for an email or ticket is 24 hours), or contact us on X, Facebook or Instagram.
For more info on available support options for your Dropbox plan, see this article.
If you found the answer to your question in this Community thread, please 'like' the post to say thanks and to let us know it was useful!