Saya ingin mengirim file teks ke dropbox tetapi menampilkan DropboxUnlinkedException
.
Solusi ::
Pertama, biarkan program Anda diautentikasi sepenuhnya. Tepat setelah metode mDBApi.getSession.startAuthentication()
, metode onResume akan dipanggil secara otomatis. Biarkan otentikasi penuh selesai dan kemudian lakukan apa yang ingin Anda lakukan.
Aktivitas Utama
public class MainActivity extends Activity implements LocationListener{
TextView date;
TextView lati;
TextView longi;
Button b1;
private DropboxAPI<AndroidAuthSession> mDBApi;
private LocationManager locationManager;
private String provider;
final static public String ACCOUNT_PREFS_NAME = "GPS_File";
final static public String APP_KEY = "5qiq4z06ikagxfb";
final static public String APP_SECRET = "f6mbf1hnn0re2ni";
final static public AccessType ACCESS_TYPE = AccessType.APP_FOLDER;
boolean mIsLoggedIn = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET);
AndroidAuthSession session = new AndroidAuthSession(appKeys, ACCESS_TYPE);
mDBApi = new DropboxAPI<AndroidAuthSession>(session);
//this is start authentication
mDBApi.getSession().startAuthentication(MainActivity.this);
//after this it will call onResume
date = (TextView)findViewById(R.id.textView2);
lati = (TextView)findViewById(R.id.textView4);
longi = (TextView)findViewById(R.id.textView6);
b1 = (Button)findViewById(R.id.button1);
createFile("abcd", "12345", "54321");
toDropbox();
setLoggedIn(mDBApi.getSession().isLinked());
}
void createFile(String str1,String str2,String str3)
{
String data = str1+"\t"+str2+"\t"+str3;
try{
File myFile = new File("/sdcard/DropboxFile1.txt");
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
myOutWriter.append(data);
myOutWriter.close();
fOut.close();
}
catch(Exception e)
{e.printStackTrace();}
}
void toDropbox()
{
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String filePath = Environment.getExternalStorageDirectory().getAbsolutePath().toString() + "/DropboxFile1.txt";
File file = new File(filePath);
mDBApi.getSession().startAuthentication(MainActivity.this);
try {
mDBApi.putFileOverwrite(filePath, new FileInputStream(file), file.length(), null);
} catch (DropboxException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
}
private void clearKeys() {
SharedPreferences prefs = getSharedPreferences(ACCOUNT_PREFS_NAME, 0);
Editor edit = prefs.edit();
edit.clear();
edit.commit();
}
//This get call after StartAuthentication..
protected void onResume() {
super.onResume();
AndroidAuthSession session = mDBApi.getSession();
// The next part must be inserted in the onResume() method of the
// activity from which session.startAuthentication() was called, so
// that Dropbox authentication completes properly.
if (session.authenticationSuccessful()) {
try {
// Mandatory call to complete the auth
session.finishAuthentication();
// Store it locally in our app for later use
TokenPair tokens = session.getAccessTokenPair();
storeKeys(tokens.key, tokens.secret);
setLoggedIn(true);
} catch (IllegalStateException e) {
//Keep this toast.. It will show you the completed authentication..
Toast.makeText(getBaseContext(), e.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
Log.i("Dropbox", "Error authenticating", e);
}
}
}
private void storeKeys(String key, String secret) {
// Save the access key for later
SharedPreferences prefs = getSharedPreferences(ACCOUNT_PREFS_NAME, 0);
Editor edit = prefs.edit();
edit.putString(APP_KEY, key);
edit.putString(APP_SECRET, secret);
edit.commit();
}
public void setLoggedIn(boolean loggedIn) {
mIsLoggedIn = loggedIn;
}
public boolean isLoggedIn() {
return mIsLoggedIn;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
}//MainActivity Ends..`
` Setelah otentikasi selesai, lakukan hal lain.
newFile
sepertinya memiliki kurung kurawal tambahan di dalamnya, jadi mungkin kode ini bahkan tidak dapat dikompilasi. Dan mengapa Anda tidak memberi kami seluruh jejak pengecualian? Anda bahkan belum memberi tahu kami baris kode mana yang memicu pengecualian. Anda juga belum memberi tahu saya apa yang Anda lakukan di aplikasi yang menyebabkan pengecualian. (Dugaan saya adalah setidaknya ada satu klik tombol yang terlibat, dan mungkin Anda masuk terlebih dahulu...) - person user94559   schedule 26.12.2013