【问题标题】:Open JSON File without downloading it打开 JSON 文件而不下载它
【发布时间】:2018-07-03 09:11:17
【问题描述】:

对于我的 Android 应用程序,我使用的是 JSON 文件,我正在将其下载到存储中。为此,我必须设置几个权限。

有没有办法在没有任何许可的情况下“下载”文件。打开它们,从文件中获取输入并使用它

【问题讨论】:

  • 这里的问题是您正在访问文件,为此您需要 READ_EXTERNAL_STORAGE 权限。为什么要下载 JSON 文件?是来自服务器的响应还是什么?

标签: android json download permissions


【解决方案1】:

将您的 JSON 文件放在assets 文件夹中,然后您可以使用以下函数从文件中读取数据:

public String loadJSONFromAsset() {
String json = null;
try {
    InputStream is = getActivity().getAssets().open("yourfilename.json");
    int size = is.available();
    byte[] buffer = new byte[size];
    is.read(buffer);
    is.close();
    json = new String(buffer, "UTF-8");
} catch (IOException ex) {
    ex.printStackTrace();
    return null;
}
return json;
}

有关从 JSON 解析数据的更多详细信息,请访问 this 链接。

【讨论】:

  • 他正试图从应用程序内访问文件,而不是从项目内的资产中访问。
  • 这是一个很好的解决方案,但问题是 JSON 文件来自服务器,所以我无法将其存储在任何地方。
【解决方案2】:

您的 Menifest 中只有 Internet 权限才能从 Internet 下载文件。

///<uses-permission android:name="android.permission.INTERNET" />


  new Thread() {
            @Override
            public void run() {
                super.run();
                StringBuilder sb = new StringBuilder();
                try {
                    URL url = new URL("http://yourwebpage.com/abc.json");
                    // Read all the text returned by the server
                    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
                    String str;
                    while ((str = in.readLine()) != null) {
                        sb.append(str);
                    }
                    in.close();
                } catch (MalformedURLException e) {
                } catch (IOException e) {
                }

                String your_json=sb.toString();

                //process Json Here



            }
        }.start();

【讨论】:

    【解决方案3】:

    从 Android 4.4(API 级别 19)开始,读取或写入应用的私有外部存储目录中的文件(使用 getExternalFilesDir() 访问)不需要 READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE 权限。因此,如果您的应用支持 Android 4.3(API 级别 18)及更低版本,并且您只想访问私有外部存储目录,则应通过添加 maxSdkVersion 属性声明仅在较低版本的 Android 上请求权限:

    <manifest ...>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
                         android:maxSdkVersion="18" />
        ...
    </manifest>
    

    更多信息请参考https://developer.android.com/training/data-storage/files#PrivateFiles

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      相关资源
      最近更新 更多