com.dropbox.client2.Exception.DropboxUnlinkedException

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.


person Lalit    schedule 26.12.2013    source sumber
comment
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
comment
Maaf untuk itu Pak, Sekarang saya telah membuat semua perubahan, silakan periksa ini. dan file baru '{' itu dilakukan secara keliru. Terima kasih. ( ',' ) @smarx   -  person Lalit    schedule 26.12.2013
comment
Dan pak, beritahu saya juga proses Buat Aplikasi di Dropbox. Seperti jenis aplikasi apa yang ingin Anda buat? dan langkah selanjutnya. terima kasih. ( ',' ) @smarx   -  person Lalit    schedule 26.12.2013
comment
Sejauh yang saya tahu, Anda masih belum memberi tahu kami apa yang sebenarnya Anda lakukan di aplikasi yang menyebabkan pengecualian ini. Sekarang kita dapat melihat bahwa itu berasal dari panggilan di pengendali tombol Anda, jadi saya kira Anda menekan tombol itu. Apa yang kamu lakukan sebelumnya? Apa yang berhasil? Apa yang tidak? Apa yang sudah Anda coba saat men-debug ini? Bisakah Anda mereproduksi kesalahan tersebut dengan program yang lebih kecil? Apakah contoh di SDK cocok untuk Anda? Apakah cara ini selalu gagal, atau terkadang berhasil? Sudahkah Anda mencari pesan kesalahan... mungkin di kode SDK?   -  person user94559    schedule 26.12.2013
comment
Pak, Lihat MainAcivity yang saya buat sederhana sekarang. Pada satu file pertama dibuat secara otomatis yang berisi beberapa hal. dan ada satu tombol jadi setelah klik tombol itu file harus dikirim itulah motto saya. Ini berfungsi hingga mDBApi.getSession().startAuthentication(MainActivity.this) setelah ini ia masuk ke halaman log in dropbox dan kemudian DropboxUnlinkedException muncul keluar di Logcat. Saya harap Anda mengerti apa yang ingin saya katakan.   -  person Lalit    schedule 26.12.2013
comment
Juga, di mana Anda menggunakan mDBApi.putFileOverwrite(filePath Di sini menurut saya seharusnya hanya nama file. Itu file yang ingin Anda ganti dengan yang baru (di dropbox). Jadi mungkin daripada menggunakan jalur file lengkap dari Anda ponsel android, cukup gunakan DropboxFile1.txt.   -  person ialexander    schedule 27.12.2013


Jawaban (2)


Anda memanggil startAuthentication tetapi kemudian segera mencoba memanggil metode API (sebelum autentikasi benar-benar terjadi). Anda hanya dapat menggunakan API setelah pengguna mengautentikasi. Dalam kode Anda, inilah bagian yang berjalan setelah pengguna mengautentikasi dan kembali ke aplikasi Anda:

protected void onResume() {
    ...
    if (session.authenticationSuccessful()) {
        ...
person user94559    schedule 26.12.2013
comment
Okokk.. Lalu saya akan melakukan satu hal, saya akan memanggil metode onResume() setelah startAuthentication Benar pak? @smarx - person Lalit; 26.12.2013
comment
Tidak, itu tidak benar. onResume secara otomatis dipanggil saat aplikasi Anda dilanjutkan. Jadi pengguna mengautentikasi di aplikasi Dropbox, dan ketika mereka kembali ke aplikasi Anda, onResume dipanggil. Ini hanyalah sebuah konsep Android dan tidak ada hubungannya dengan Dropbox. - person user94559; 26.12.2013
comment
Terima kasih Pak. Sekarang saya memahami sepenuhnya cara kerja otentikasi. Namun sekarang aplikasi saya mempunyai masalah yang berbeda. 12-26 09:32:16.423: E/AndroidRuntime(1116): FATAL EXCEPTION: main 12-26 09:32:16.423: E/AndroidRuntime(1116): android.os.NetworkOnMainThreadException Apa maksudnya. Apa yang harus saya lakukan sekarang untuk itu? @smarx - person Lalit; 26.12.2013
comment
Itu pertanyaan yang tidak berhubungan, dan mesin pencari mana pun akan dengan cepat memberi tahu Anda apa arti kesalahan tersebut. - person user94559; 26.12.2013
comment
lihat judul stackoverflow.com/questions/28428719/ - person Siddharth; 23.02.2015
comment
@Siddharth Jika jawaban saya tidak lengkap atau tidak jelas, mohon jelaskan alasannya. - person user94559; 23.02.2015

Kesalahan ini mungkin juga muncul ketika Anda melewatkan panggilan ini di onResume() aktivitas Anda :

                mDBApi.getSession().finishAuthentication();
person user2903200    schedule 20.03.2014