com.dropbox.client2.Exception.DropboxUnlinkedException

ฉันต้องการส่งไฟล์ข้อความไปที่ดรอปบ็อกซ์แต่มันแสดง DropboxUnlinkedException

สารละลาย ::

ขั้นแรก ให้โปรแกรมของคุณได้รับการรับรองความถูกต้องโดยสมบูรณ์ หลังจากเมธอด mDBApi.getSession.startAuthentication() เมธอด onResume จะถูกเรียกโดยอัตโนมัติ ปล่อยให้การตรวจสอบสิทธิ์แบบเต็มเสร็จสมบูรณ์ จากนั้นทำสิ่งที่คุณต้องการจะทำ

กิจกรรมหลัก

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..`

` หลังจากการรับรองความถูกต้องเสร็จสิ้นแล้ว ให้ทำอย่างอื่นของคุณ


person Lalit    schedule 26.12.2013    source แหล่งที่มา
comment
newFile ดูเหมือนว่าจะมีวงเล็บปีกกาพิเศษอยู่ ดังนั้นโค้ดนี้จึงอาจไม่สามารถคอมไพล์ได้ แล้วทำไมคุณไม่แจ้งสแต็กเทรซของข้อยกเว้นทั้งหมดให้เราทราบล่ะ คุณยังไม่ได้แจ้งให้เราทราบด้วยซ้ำว่าโค้ดของคุณบรรทัดใดที่ทำให้เกิดข้อยกเว้น คุณยังไม่ได้บอกฉันว่าคุณทำอะไรในแอปเพื่อทำให้เกิดข้อยกเว้น (ฉันเดาว่ามีการคลิกปุ่มอย่างน้อยหนึ่งครั้งที่เกี่ยวข้อง และ อาจจะ คุณเข้าสู่ระบบก่อน...)   -  person user94559    schedule 26.12.2013
comment
ขออภัยท่านผู้นั้น ตอนนี้ฉันได้ทำการเปลี่ยนแปลงทั้งหมดแล้ว โปรดตรวจสอบสิ่งนี้ และ newFile '{' นั้นทำผิดพลาด ขอบคุณ. ( ',' ) @smarx   -  person Lalit    schedule 26.12.2013
comment
และท่าน โปรดบอกขั้นตอนสร้างแอปบน Dropbox ให้ฉันด้วย เช่น แอปประเภทใดที่คุณต้องการสร้าง และขั้นตอนถัดไป ขอบคุณ ( ',' ) @smarx   -  person Lalit    schedule 26.12.2013
comment
เท่าที่ฉันสามารถบอกได้ คุณยังไม่ได้แจ้งให้เราทราบว่าคุณทำอะไรในแอปจริง ๆ เพื่อทำให้เกิดข้อยกเว้นนี้ ตอนนี้เราเห็นแล้วว่ามาจากการโทรในตัวจัดการปุ่มของคุณ ดังนั้นฉันเดาว่าคุณกดปุ่มนั้น ก่อนหน้านั้นคุณทำอะไร? อะไรได้ผล? อะไรไม่ได้? คุณได้ลองทำอะไรเมื่อคุณทำการดีบั๊กสิ่งนี้? คุณสามารถสร้างข้อผิดพลาดด้วยโปรแกรมขนาดเล็กลงได้หรือไม่? ตัวอย่างใน SDK เหมาะกับคุณหรือไม่ สิ่งนี้ล้มเหลวเสมอหรือบางครั้งก็ได้ผล? คุณได้ค้นหาข้อความแสดงข้อผิดพลาดแล้ว... อาจอยู่ในโค้ด SDK หรือไม่   -  person user94559    schedule 26.12.2013
comment
ท่านที่รัก ดูกิจกรรมหลักสิ ฉันทำให้มันง่ายแล้ว ในตอนแรก ไฟล์เดียวจะถูกสร้างขึ้นโดยอัตโนมัติ ซึ่งมีบางอย่าง และ มีปุ่มเดียว ดังนั้น หลังจากคลิกไปที่ไฟล์ปุ่มนั้นแล้ว ควรส่ง นั่นคือคำขวัญของฉัน ใช้งานได้จนถึง mDBApi.getSession().startAuthentication(MainActivity.this) หลังจากนี้ ไปที่หน้าเข้าสู่ระบบดรอปบ็อกซ์ จากนั้น DropboxUnlinkedException จะปรากฏขึ้น ออกใน Logcat ฉันหวังว่าคุณจะเข้าใจสิ่งที่ฉันหมายถึงจะพูด   -  person Lalit    schedule 26.12.2013
comment
นอกจากนี้ ที่คุณใช้ mDBApi.putFileOverwrite(filePath ที่นี่ ฉันคิดว่าควรจะเป็นชื่อของไฟล์ มันเป็นไฟล์ที่คุณต้องการแทนที่ด้วยไฟล์ใหม่ (บนดรอปบ็อกซ์) ดังนั้นบางทีแทนที่จะใช้เส้นทางไฟล์ที่สมบูรณ์จากของคุณ โทรศัพท์ Android เพียงใช้ DropboxFile1.txt   -  person ialexander    schedule 27.12.2013


คำตอบ (2)


คุณกำลังโทรหา startAuthentication แต่จากนั้นก็พยายามเรียกวิธี API ทันที (ก่อนที่การรับรองความถูกต้องจะเกิดขึ้นจริง) คุณสามารถใช้ API ได้เมื่อผู้ใช้ตรวจสอบสิทธิ์แล้วเท่านั้น ในโค้ดของคุณ นี่คือส่วนที่ทำงานหลังจากที่ผู้ใช้ตรวจสอบสิทธิ์และกลับสู่แอปของคุณแล้ว:

protected void onResume() {
    ...
    if (session.authenticationSuccessful()) {
        ...
person user94559    schedule 26.12.2013
comment
ตกลง.. ถ้าอย่างนั้น ฉันจะทำสิ่งหนึ่ง ฉันจะ เรียกใช้เมธอด onResume() หลังจาก startAuthentication ใช่ไหมครับ? @smarx - person Lalit; 26.12.2013
comment
ไม่ นั่นไม่ถูกต้อง onResume จะถูกเรียกโดยอัตโนมัติเมื่อแอปของคุณกลับมาทำงานต่อ ผู้ใช้จึงตรวจสอบสิทธิ์ในแอป Dropbox และเมื่อพวกเขากลับมาที่แอปของคุณ onResume จะถูกเรียก นี่เป็นเพียงแนวคิดของ Android และไม่เกี่ยวข้องกับ Dropbox - person user94559; 26.12.2013
comment
ขอบคุณท่าน. ตอนนี้ฉันเข้าใจแล้วว่าการรับรองความถูกต้องทำงานอย่างไร แต่ตอนนี้แอปของฉันมีปัญหาที่แตกต่างออกไป 12-26 09:32:16.423: E/AndroidRuntime(1116): FATAL EXCEPTION: main 12-26 09:32:16.423: E/AndroidRuntime(1116): android.os.NetworkOnMainThreadException มันหมายถึงอะไร ฉันควรทำอย่างไรเพื่อมันตอนนี้? @smarx - person Lalit; 26.12.2013
comment
นั่นเป็นคำถามที่ไม่เกี่ยวข้อง และเครื่องมือค้นหาใดๆ ควรจะบอกคุณได้อย่างรวดเร็วว่าข้อผิดพลาดนั้นหมายถึงอะไร - person user94559; 26.12.2013
comment
ตรวจสอบชื่อ stackoverflow.com/questions/28428719/ - person Siddharth; 23.02.2015
comment
@Siddharth หากคำตอบของฉันไม่สมบูรณ์หรือไม่ชัดเจน โปรดอธิบายว่าทำไม - person user94559; 23.02.2015

ข้อผิดพลาดนี้อาจเกิดขึ้นเมื่อคุณพลาดการโทรนี้ใน onResume() ของกิจกรรมของคุณ :

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