【问题标题】:Volley Request too slow排球请求太慢
【发布时间】:2015-10-20 04:12:00
【问题描述】:

我的应用程序因以下原因而崩溃;

loadJsonFromAsset() 方法在使用 update() 方法写入 JSON 文件后读取它,但它直接进入读取部分,我的应用程序崩溃,因为文件 video.json 不存在,JSON 没有被写入,它与 Volley 请求的速度有多慢有关?还是我如何创建文件?我编写和读取 JSON 文件以将其缓存在用户的手机上,如果该文件已经存在于手机上,它会直接进入读取部分(但如果文件退出,我还没有实现它)。例如,如果我删除我的代码 loadJSONFromAsset() 的读取部分,而是运行 update() 方法,它会使用我请求的 JSON 数据创建 JSON 文件,然后如果我使用 loadJSOnFromAsset() 重新运行程序并且bam我读取了数据并且我的应用程序没有崩溃。我认为我的问题是我正在缓慢地存储缓存?

loadJsonFromAsstet() 读取 JSON

public String loadJSONFromAsset() {

    update();

    String json = null;
    try {
        FileInputStream is = getActivity().openFileInput("video.json");
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        json = new String(buffer, "UTF-8");
    } catch (IOException ex) {
        Toast.makeText(getActivity(), "Error Fetching Data", Toast.LENGTH_LONG).show();
        return null;
    }

    return json;

}

更新();使用请求的数据写入 JSON

public void update(){
    // Formulate the request and handle the response.

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, URL, (String )null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    Toast.makeText(getActivity(), response.toString(), Toast.LENGTH_LONG).show();

                    try {
                        FileOutputStream fos = getActivity().openFileOutput("video.json", Context.MODE_PRIVATE);
                        Writer out = new OutputStreamWriter(fos);
                        out.write(response.toString());
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                }

            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getActivity(), "Error Fetching Data", Toast.LENGTH_LONG).show();
        }
    });

    //remove cash
    jsonObjectRequest.setShouldCache(false);
    mRequestQueue.add(jsonObjectRequest);
}

谢谢!! :)

【问题讨论】:

    标签: android json android-volley


    【解决方案1】:

    在确保文件已成功加载和保存之前,您不应尝试读取文件。所以,你需要先调用update()方法,并在onResponse里面取json。

    现在您的onResponse 在您尝试读取文件后被调用(因为它是异步的),因此您会收到错误。

    【讨论】:

    • 是的,这正是问题所在,但我如何确定它已成功加载并保存?
    • 确保正确书写和阅读:example。而你只阅读onResponse
    • 请求后如何用数据更新recyclerviewview?
    • @MadBoy 您需要更新 RecyclerAdapter 的数据并致电 notifyDataSetChanged() 。以this 回答为例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2015-07-21
    相关资源
    最近更新 更多