【问题标题】:Android download images from a public dropbox folderAndroid 从公共 Dropbox 文件夹下载图像
【发布时间】:2014-04-03 15:13:36
【问题描述】:

我的客户希望我从他的公共保管箱文件夹中下载图像并在应用程序中显示它们。 (想想壁纸应用程序)。有没有办法使用适用于 Android 的 Dropbox sdk 来做到这一点?阅读文档我只能找到涉及用户验证自己和使用他自己的保管箱帐户的方法。

我能想到的只是放置一个带有图像链接的文本文件并首先下载它,然后解析它并从其中的 url 下载图像。然而,这仍然需要在每次添加新图像时手动编辑和更新文本文件。

【问题讨论】:

    标签: android dropbox dropbox-api


    【解决方案1】:

    Dropbox API 旨在与经过身份验证的用户一起使用,以对该特定帐户进行 API 调用。如果您已经有需要从中提取的可公开访问的 URL,则根本不需要使用 API,您可以直接从这些 URL 下载。这些问题可能对此有所帮助:

    听起来剩下的问题是您可能不提前知道所有链接,因此使用您提到的索引文件听起来很合理。 (API 可以让您列出文件夹中的文件,但在我看来,对于这种特殊情况来说,这将是矫枉过正。)

    【讨论】:

      【解决方案2】:

      几个月前我做过类似的项目,从 Dropbox 获取完整路径和最新更改。这是我用过的代码。有您的答案,实际上比您想要的要多,因为代码为您提供了文件夹的最新更改 例如:-删除的图像

      在这段代码中,我获取了所有文件夹中包含的所有图像的 url,根据需要进行修改

      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();
      
              }
          };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-17
        • 2019-01-19
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 2022-07-28
        • 1970-01-01
        • 2014-02-14
        相关资源
        最近更新 更多