我的客户希望我从他的公共Dropbox文件夹下载图像并在应用中显示它们。 (想想壁纸应用程序)。有没有办法使用Android的Dropbox sdk?阅读文档我只能找到涉及用户验证自己并使用自己的dropbox帐户的方法。
我所能想到的只是放置一个文本文件,其中包含指向图像的链接并首先下载,然后解析它并从其中的网址下载图像。但是,每次添加新图像时,仍然需要手动编辑和更新文本文件。
答案 0 :(得分:1)
Dropbox API旨在与经过身份验证的用户一起使用,以对该特定帐户进行API调用。如果您已经拥有需要公开访问的URL,则根本不需要使用API,您可以直接从这些URL下载。这些问题可能对此有所帮助:
听起来剩下的问题是您可能不提前知道所有链接,因此使用像您提到的索引文件听起来合理。 (API可以让你列出一个文件夹中的文件,但在我看来,对于这个特定的场景来说,它会有点过分。)
答案 1 :(得分:0)
我几个月前做过similer这样的项目,从dropbox和最新的变化中获取完整的路径。这是我用过的代码。有你的答案,实际上比你想要的更多,因为代码会给你最新的文件夹更改 例如:删除图像
在此代码中我获取了所有文件夹中包含的所有图片网址,并根据需要进行修改
imageLoadingAsyncTask = new AsyncTask<Void, Void, String[]>() {
ArrayList<String> loadingPaths = new ArrayList<String>();
ArrayList<String> deletedPathList = new ArrayList<String>();
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String[] doInBackground(Void... params) {
Log.i("start background running", "do in background...");
Log.d(TAG, "ddd1");
try {
DeltaPage<Entry> deltaPage;
// initializing cursor
App.initializeCursor(mContext);
do {
deltaPage = mApi.delta(App.getDropBoxCursor(mContext));
App.updateCursor(mContext, deltaPage.cursor);
if (!deltaPage.reset) {
for (DropboxAPI.DeltaEntry<DropboxAPI.Entry> entry : deltaPage.entries) {
if (entry.metadata != null) {
// if (!entry.metadata.isDeleted) {
// Log.d(TAG,
// String.format(
// "entry.metadata (%d) : %s",
// (entry.metadata.contents == null ? 0
// : entry.metadata.contents
// .size()),
// entry.metadata.path));
if (!(entry.metadata.isDir)
&& entry.metadata.thumbExists) {
loadingPaths.add(entry.metadata.path
.toLowerCase());
Log.i("entry path",
"entry path="
+ entry.metadata.path
.toLowerCase());
}
} else {
deletedPathList.add(entry.lcPath
.toLowerCase());
// filesToRemove.add(entry.lcPath);
}
}
} else {
// onDeltaLoadingListener.onReset();
}
} while (deltaPage.hasMore);
} catch (DropboxIOException e) {
e.printStackTrace();
i_activity_dropbox_photo_grid.putExtra("exception", "drop");
} catch (DropboxException e) {
e.printStackTrace();
}
// ---------------end checking dropbox chenges
// ////////////////////////// _list2 =
_list2 = new DropBoxImagePathDataAccess(mContext)
.getAppPathList();
// //// }
if (deletedPathList.size() > 0) {
int x = 0, y = 0;
for (String path : deletedPathList) {
// ////////////////////////////////////////////////////////////////////////////////////////////////
// path = path.replaceAll("['.]", "");
if (_list2.size() > 0 && _list2.contains(path)) {
_list2.remove(path);
new DropBoxImagePathDataAccess(mContext)
.removePath(path);
x = 1;
}
if (loadingPaths.size() > 0
&& loadingPaths.contains(path)) {
loadingPaths.remove(path);
}
// if the user delete a whole folder
// following code will check folder name is contains in
// the paths
// if contains then whole part is removed, since all the
// folder contents also should be remove
for (String path1 : _list2) {
if (_list2.get(y).contains(path.toLowerCase())) {
_list2.remove(y);
new DropBoxImagePathDataAccess(mContext)
.removePath(path1);
}
y++;
}
}
}
// remove duplicate paths
for (String path : _list2) {
// /////////////////////////////////////////////////////////////////////////////////path
// = path.replaceAll("[',,]", "");
if (loadingPaths.contains(path)) {
loadingPaths.remove(path);
}
}
int i = 0;
int size = 0;
size = _list2.size() + loadingPaths.size();
mStrings = new String[size];
// add old paths to mString array
for (String path : _list2) {
if (i < size) {
mStrings[i] = path;
i++;
}
}
// add new paths to mStrings array
ArrayList<String> updatePaths = new ArrayList<String>();
if (loadingPaths.size() > 0) {
for (String newpath : loadingPaths) {
if (!_list2.contains(newpath)) {
updatePaths.add(newpath);
mStrings[i] = newpath;
i++;
}
}
}
// update shared preference
if (updatePaths.size() > 0) {
new DropBoxImagePathDataAccess(mContext)
.createPathList(updatePaths);
}
Log.i("mString size", "mString size=" + mStrings.length);
return mStrings;
}
@Override
protected void onPostExecute(String[] result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
finalImageList = result;
int i1 = 0;
for (String path : finalImageList) {
Log.i("final Image list", "final image list" + " i= " + i1
+ " path= " + path);
}
App.DROP_BOX_ALL_PHOTO_LOCATED = true;
i_activity_dropbox_photo_grid.putExtra("finalList", finalImageList);
startActivity(i_activity_dropbox_photo_grid);
overridePendingTransition(R.anim.activity_from_right,
R.anim.activity_to_left);
finish();
}
};