排球要求太慢

时间:2015-10-20 04:12:01

标签: android json android-volley

我的应用因以下情况而崩溃;

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

谢谢! :)

1 个答案:

答案 0 :(得分:0)

在确保已成功加载并保存文件之前,不应尝试从文件中读取文件。因此,您首先需要调用name_full方法并在update()内部使用json。

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