2015-05-09 77 views
0

目前我可以將它保存到我的外部SD卡,但我想將它保存到我的Dropbox目錄。如何將android中的文件保存到我的Dropbox目錄中?

try { 
    File root = new File("Dropbox/"); 
    File gpxfile = new File(root, "test.txt"); 
    if(!gpxfile.exists()){ 
     gpxfile.createNewFile(); 
    } 
    FileWriter writer = new FileWriter(gpxfile, true); 

等 我不知道是否有反正有Dropbox的作爲目錄。

+0

可以使用[升降梭箱](https://www.dropbox.com/developers/core/start/android)API 。儘管如此,你會做得有點不同。 – JonasCz

回答

0

Dropbox在android中的集成可以通過DropBox API完成。

Downloading file from dropbox


上傳文件到收存箱


/* 
* Copyright (c) 2011 Dropbox, Inc. 
* 
* Permission is hereby granted, free of charge, to any person 
* obtaining a copy of this software and associated documentation 
* files (the "Software"), to deal in the Software without 
* restriction, including without limitation the rights to use, 
* copy, modify, merge, publish, distribute, sublicense, and/or sell 
* copies of the Software, and to permit persons to whom the 
* Software is furnished to do so, subject to the following 
* conditions: 
* 
* The above copyright notice and this permission notice shall be 
* included in all copies or substantial portions of the Software. 
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
* OTHER DEALINGS IN THE SOFTWARE. 
*/ 




import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.os.AsyncTask; 
import android.widget.Toast; 

import com.dropbox.client2.DropboxAPI; 
import com.dropbox.client2.DropboxAPI.UploadRequest; 
import com.dropbox.client2.ProgressListener; 
import com.dropbox.client2.exception.DropboxException; 
import com.dropbox.client2.exception.DropboxFileSizeException; 
import com.dropbox.client2.exception.DropboxIOException; 
import com.dropbox.client2.exception.DropboxParseException; 
import com.dropbox.client2.exception.DropboxPartialFileException; 
import com.dropbox.client2.exception.DropboxServerException; 
import com.dropbox.client2.exception.DropboxUnlinkedException; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 

/** 
* Here we show uploading a file in a background thread, trying to show 
* typical exception handling and flow of control for an app that uploads a 
* file from Dropbox. 
*/ 
public class Upload extends AsyncTask<Void, Long, Boolean> { 

    private DropboxAPI<?> mApi; 
    private String mPath; 
    private File mFile; 
    private long mFileLen; 
    private UploadRequest mRequest; 
    private Context mContext; 
    private final ProgressDialog mDialog; 
    private String mErrorMsg; 


    public Upload(Context context, DropboxAPI<?> api, String dropboxPath, 
        File file) { 
     // We set the context this way so we don't accidentally leak activities 
     mContext = context.getApplicationContext(); 

     mFileLen = file.length(); 
     mApi = api; 
     mPath = dropboxPath; 
     mFile = file; 

     mDialog = new ProgressDialog(context); 
     mDialog.setMax(100); 
     mDialog.setMessage("Uploading " + file.getName()); 
     mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     mDialog.setProgress(0); 
     mDialog.setButton(ProgressDialog.BUTTON_POSITIVE, "Cancel", new OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       // This will cancel the putFile operation 
       try { 
        mRequest.abort(); 
       } catch (Exception e) { 

       } 

      } 
     }); 
     mDialog.show(); 
     mDialog.setCanceledOnTouchOutside(false); 
    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 
     try { 
      // By creating a request, we get a handle to the putFile operation, 
      // so we can cancel it later if we want to 
      FileInputStream fis = new FileInputStream(mFile); 
      String path = mPath + mFile.getName(); 
      mRequest = mApi.putFileOverwriteRequest(path, fis, mFile.length(), 
        new ProgressListener() { 
         @Override 
         public long progressInterval() { 
          // Update the progress bar every half-second or so 
          return 500; 
         } 

         @Override 
         public void onProgress(long bytes, long total) { 
          publishProgress(bytes); 
         } 
        }); 

      if (mRequest != null) { 
       mRequest.upload(); 
       return true; 
      } 

     } catch (DropboxUnlinkedException e) { 
      // This session wasn't authenticated properly or user unlinked 
      mErrorMsg = "This app wasn't authenticated properly."; 
     } catch (DropboxFileSizeException e) { 
      // File size too big to upload via the API 
      mErrorMsg = "This file is too big to upload"; 
     } catch (DropboxPartialFileException e) { 
      // We canceled the operation 
      mErrorMsg = "Upload canceled"; 
     } catch (DropboxServerException e) { 
      // Server-side exception. These are examples of what could happen, 
      // but we don't do anything special with them here. 
      if (e.error == DropboxServerException._401_UNAUTHORIZED) { 
       // Unauthorized, so we should unlink them. You may want to 
       // automatically log the user out in this case. 
      } else if (e.error == DropboxServerException._403_FORBIDDEN) { 
       // Not allowed to access this 
      } else if (e.error == DropboxServerException._404_NOT_FOUND) { 
       // path not found (or if it was the thumbnail, can't be 
       // thumbnailed) 
      } else if (e.error == DropboxServerException._507_INSUFFICIENT_STORAGE) { 
       // user is over quota 
      } else { 
       // Something else 
      } 
      // This gets the Dropbox error, translated into the user's language 
      mErrorMsg = e.body.userError; 
      if (mErrorMsg == null) { 
       mErrorMsg = e.body.error; 
      } 
     } catch (DropboxIOException e) { 
      // Happens all the time, probably want to retry automatically. 
      mErrorMsg = "Network error. Try again."; 
     } catch (DropboxParseException e) { 
      // Probably due to Dropbox server restarting, should retry 
      mErrorMsg = "Dropbox error. Try again."; 
     } catch (DropboxException e) { 
      // Unknown error 
      mErrorMsg = "Unknown error. Try again."; 
     } catch (FileNotFoundException e) { 
     } 
     return false; 
    } 

    @Override 
    protected void onProgressUpdate(Long... progress) { 
     int percent = (int) (100.0 * (double) progress[0]/mFileLen + 0.5); 
     mDialog.setProgress(percent); 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     mDialog.dismiss(); 
     if (result) { 
      showToast("Successfully uploaded"); 
     } else { 
      showToast(mErrorMsg); 
     } 
    } 

    private void showToast(String msg) { 
     Toast error = Toast.makeText(mContext, msg, Toast.LENGTH_LONG); 
     error.show(); 
    } 
} 

調用方法

Upload upload = new Upload(context, mApi, mPath, file); 
upload.execute(); 

在哪裏,MAPI是DropboxAPI

的參考
+0

有沒有廣義的意圖類方法呢?我認爲谷歌肯定會走這條路線,以便他們可以預先包括在他們的api儲存到谷歌驅動器 –

相關問題