2014-10-21 32 views
0

我正在開發一個應用程序來建立不同名稱的列表。列表的內容位於數據庫內的表格中。我希望將這些表中的一些發送到Dropbox數據存儲區,以便在多個設備之間共享它們。

對於我的實踐,我開始嘗試在連接我的應用程序後在Dropbox上創建一個簡單的表格。但我有一個錯誤信息,我想不通爲什麼...

這裏我的活動:

public class ListingArticlesDropb extends Activity implements PersonneAdapterListener{ 


    static final int REQUEST_LINK_TO_DBX = 0; // This value is up to you 

    private Button mLinkButton; 
    private Button mUnlinkButton; 

    private DbxAccountManager mAccountManager; 
    private DbxDatastoreManager mDatastoreManager; 
    private DbxAccount account ; 

    final private String APP_KEY = **** APP_KEY **** ; 
    final private String APP_SECRET = **** APP_SECRET **** ; 
    DbxDatastore datastore; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.list_articles); 


     /** 
     * Get objects from the precedent activity 
     */ 
     Bundle bundle = getIntent().getExtras(); 
     final String extras = bundle.getString("Title"); 

     /** 
     * Connection to the datastore Dropbox 
     */ 
     // Set up the account manager 
     mAccountManager = DbxAccountManager.getInstance(getApplicationContext(), APP_KEY, APP_SECRET); 
     mAccountManager.startLink((Activity)ListingArticlesDropb.this, REQUEST_LINK_TO_DBX); 


     // Set up the datastore manager 
     if (mAccountManager.hasLinkedAccount()) { 
      try { 
       // Use Dropbox datastores 
       mDatastoreManager = DbxDatastoreManager.forAccount(mAccountManager.getLinkedAccount()); 
       Toast.makeText(this, "Connection Dropbox", Toast.LENGTH_LONG).show(); 
      } catch (DbxException.Unauthorized e) { 
       System.out.println("Account was unlinked remotely"); 
      } 
     } 
     if (mDatastoreManager == null) { 
      // Account isn't linked yet, use local datastores 
      mDatastoreManager = DbxDatastoreManager.localManager(mAccountManager); 
      Toast.makeText(this, "Connection Locale", Toast.LENGTH_LONG).show(); 

     } 

    } 


    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQUEST_LINK_TO_DBX) { 
      if (resultCode == Activity.RESULT_OK) { 
       account = mAccountManager.getLinkedAccount(); 
       Toast.makeText(this, "onActivityResult", Toast.LENGTH_LONG).show(); 

       try { 
        // Migrate any local datastores to the linked account 
        mDatastoreManager.migrateToAccount(account); 
        // Now use Dropbox datastores 
        mDatastoreManager = DbxDatastoreManager.forAccount(account); 

       } catch (DbxException e) { 
        e.printStackTrace(); 
       } 
      } else { 
       // Link failed or was cancelled by the user 
      } 
     } else { 
      super.onActivityResult(requestCode, resultCode, data); 
     } 


     // ---------- The problem comes here ------------- // 
     try { 
     // This line makes my app to stop. 
      DbxDatastore datastore = mDatastoreManager.openOrCreateDatastore("Articles"); 
     } catch (DbxException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


    } 





    @Override 
    public void onClickNom(Article item, int position) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onClickNomToDelete(Article item, int position) { 
     // TODO Auto-generated method stub 

    } 
} 

這裏的錯誤消息:

10-21 19:39:02.410: E/AndroidRuntime(22961): FATAL EXCEPTION: main 
10-21 19:39:02.410: E/AndroidRuntime(22961): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=0, data=null} to activity {com.example.dvp_list7/com.example.dvp_list7.ListingArticlesDropb}: com.dropbox.sync.android.DbxRuntimeException$IllegalArgument: Illegal datastore ID 'Articles'. 
10-21 19:39:02.410: E/AndroidRuntime(22961): at android.app.ActivityThread.deliverResults(ActivityThread.java:3337) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3380) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at android.app.ActivityThread.access$1100(ActivityThread.java:155) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at android.os.Looper.loop(Looper.java:137) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at android.app.ActivityThread.main(ActivityThread.java:5096) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at java.lang.reflect.Method.invokeNative(Native Method) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at java.lang.reflect.Method.invoke(Method.java:511) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at dalvik.system.NativeStart.main(Native Method) 
10-21 19:39:02.410: E/AndroidRuntime(22961): Caused by: com.dropbox.sync.android.DbxRuntimeException$IllegalArgument: Illegal datastore ID 'Articles'. 
10-21 19:39:02.410: E/AndroidRuntime(22961): at com.dropbox.sync.android.DbxDatastore.checkId(DbxDatastore.java:534) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at com.dropbox.sync.android.DbxDatastoreManager.openOrCreateDatastore(DbxDatastoreManager.java:342) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at com.example.dvp_list7.ListingArticlesDropb.onActivityResult(ListingArticlesDropb.java:113) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at android.app.Activity.dispatchActivityResult(Activity.java:5342) 
10-21 19:39:02.410: E/AndroidRuntime(22961): at android.app.ActivityThread.deliverResults(ActivityThread.java:3333) 
10-21 19:39:02.410: E/AndroidRuntime(22961): ... 11 more 

感謝很多人誰可以幫助我!

回答

1

錯誤消息是準確的。您使用「文章」作爲數據存儲ID,但專用數據存儲的數據存儲ID必須是「1-64個字符,只能包含小寫字母,數字,點,連字符或下劃線,且不能以點開頭或結尾。 (見https://www.dropbox.com/developers/datastore/docs/http#general

這裏的問題是大寫字母「A」。

+0

謝謝你的好消息@smarx!但是,即使通過「文章」來刪除「文章」,也不會創建數據存儲,並且會收到新的錯誤消息。這似乎有一個緩存問題。我要編輯我的問題以使用此錯誤消息進行更新。 – KevHV 2014-10-21 22:28:07

+0

請問一個新問題,因爲你的新問題與這個問題無關。 – smarx 2014-10-22 02:35:09