代码之家  ›  专栏  ›  技术社区  ›  Henry

正在从dropbox Android工作室的共享链接中读取.txt文件

  •  5
  • Henry  · 技术社区  · 9 年前

    我正在尝试从带有公共共享链接的dropbox中读取一个.txt文件。我想做的是阅读这个.txt,并在android的列表视图中显示这个文件中的所有数据。

    http://txt.do/5zflt (我没有访问当前计算机的权限,因此我想使用此链接作为示例)

    该文件名为PersonStatus,将包含以下行的文本:;

    Online
    Offline
    Active
    Holidays
    ….
    ….
    …
    …
    …
    …
    

    基本上,我想做的是使用共享的dropbox链接来阅读这篇文章,并将其显示在android上的列表视图中,但我不确定如何才能做到这一点。我在网上搜索了教程和指南,但对于android来说,我还没有找到什么有用的东西;

    例如,我找到了以下链接: Read a file from dropbox OP提出了一个类似的问题,但没有提供足够的代码让我理解如何处理这个问题。同样通过我的研究,我发现dropbox有Android Sync API: https://www.dropbox.com/developers-v1/sync/start/android 但作为编程新手,我不太确定如何实现并使其工作。

    如果有人能帮忙,我将非常感激。提前谢谢。如果我的问题不清楚,请告诉我,我会尽力更好地解释。

    2 回复  |  直到 8 年前
        1
  •  5
  •   andrea.petreri    9 年前

    我把 here 在GitHub上,您描述了一个示例项目实现场景(我还放了一个公共文件,其中包含您报告的结构 here 在Dropbox上)。在项目内部,您将发现以下主要组件:

    1. 主要活动 -它包括一个 RecyclerView 将填充文件内容行。为了获取文件内容,该活动依赖于保留的片段,允许在屏幕旋转的情况下保留下载任务(请参见 here 有关配置更改的详细信息)。创建活动后,文件会自动下载,但您可以使用 同步 按钮。
    2. 下载片段 -它是一个保留的片段 AsyncTask 用于下载文件。它提供了 Callback MainActivity 用于处理下载期间发生的特定事件(例如onPrepare、onProgress、onDownloadCompleted、onDown Failed)。例如,您可以使用它们向用户显示进度条或其他反馈。
    3. 文件内容适配器 -它是用于在 回收站视图 .

    一些限制

    • 此应用程序不关注Dropbox。如果文件在互联网上是公开的,你可以下载它,不管谁是它的宿主。如果您的目的是保持活动与Dropbox上的文件自动同步,那么最好利用Dropbox SDK,尤其是如果您计划访问Dropbox中的私有文件。
    • 异步任务 应该改进实施,例如通过实施 WakeLock 经营
        2
  •  2
  •   Gueorgui Obregon Vikram    9 年前

    在我的应用程序中,我使用此代码获取共享dropbox文件的内容。我在AsyncTask内部调用此代码。

    已编辑 :这是一个示例

    public class DropboxSampleActivity extends Activity {
    
    private ListView listViewDropbox;
    private ArrayAdapter<String> adapter = null;
    private static String URL_FILE_DROPBOX = "https://www.dropbox.com/s/xxxxxxxxxxxx/xxxxxxxxxxxx?dl=1";
    private ArrayList<String> listElementItem;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_dropbox_list);
    
        super.onCreate(savedInstanceState);
        listViewDropbox = (ListView) findViewById(R.id.listViewDropbox);
        DropboxItemAsyncTask dropboxItemAsyncTask = new DropboxItemAsyncTask();
        dropboxItemAsyncTask.execute();
    }
    
    class DropboxItemAsyncTask extends AsyncTask {
    
        protected Integer doInBackground(Object[] params) {
    
            try {
                listElementItem = new ArrayList<>();
                URLConnection conn = new URL(URL_FILE_DROPBOX).openConnection();
                conn.connect();
                InputStream is = conn.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        is, "UTF-8"), 8);
                String line = null;
                while ((line = reader.readLine()) != null) {
                    listElementItem.add(line);
                }
                is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
    
        @Override
        protected void onPostExecute(Object o) {
            if (adapter == null) {
                adapter = new ArrayAdapter(DropboxSampleActivity.this,
                        android.R.layout.simple_list_item_1, listElementItem);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        listViewDropbox.setAdapter(adapter);
                    }
                });
            } else {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        adapter.notifyDataSetChanged();
                    }
                });
    
            }
        }
    };
    

    }