java - 从 JSON Volley 请求中获取值的正确方法是什么?

标签 java android android-volley inner-classes

我有一个如下所示的 JSON 请求:

JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET,
        url,
        (String) null,
        new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                roomArray = parseRoomsResponse(response);
                callback.onSuccess(roomArray);
            }
        }, new Response.ErrorListener() {

    @Override
    public void onErrorResponse(VolleyError error) {

    }
}

这个请求在 onCreateView() 方法中,我的 parseRoomsResponse() 方法返回一个我希望使用的 ArrayListonCreateView() 中,那么做这件事的正确方法是什么?

最佳答案

I know its ok, i must handle everithing inside onSuccess inner class, is there some way of getting values to onCreateView? – Zoltan Kurtyak

啊..我看到你现在有问题了。

这里的问题是 Request 需要花费未知的时间来返回 Response,因此 Volley 会为您异步发出这些请求,而不是锁定您的 UI 线程。
因此,如果您在 onCreateView 中发出请求,您不太可能在收到响应时仍处于 onCreateView 中。

您可能需要重新考虑您的代码流程。如果您的 fragment View 取决于请求的响应,那么您可能应该确保在创建 fragment View 之前执行请求并获得响应。


解决此问题的典型方法是在收到响应之前使用占位符值。例如:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_layout, container, false);
    ...
    EditText myEditText = (EditText) rootView.findViewById(R.id.response_dependent_edittext);
    myEditText.setText("Loading Data");

    ImageView myImageView = (ImageView) rootView.findViewById(R.id.response_dependent_imageview);
    myImageView.setImageResource(R.drawable.image_placeholder);
    ...

    return rootView;
}

然后你可以创建一个updateViews方法;

private void updateViews(ArrayList<MyArrayType> myParsedArray) {

    // Extract relevant data from the array
    ...

    // Replace the place holders in the relevant views
    EditText myEditText = (EditText) getView().findViewById(R.id.response_dependent_edittext);
    myEditText.setText(stringFromParsedArray);

    ImageView myImageView = (ImageView) getView().findViewById(R.id.response_dependent_imageview);
    myImageView.setImageDrawable(drawableFromParsedArray);

}

并从您请求的onResponse 方法中调用它:

@Override
    public void onResponse(JSONObject response) {
        myParsedArray = parseResponse(response);
        updateViews(myParsedResponse);
        ...
    }

关于java - 从 JSON Volley 请求中获取值的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31281544/

相关文章:

java - 如何从 Kotlin/Java 中运行 Kotlin-Script (.kts) 文件?

android - ActionBarCompat - 如何使用它

java - 将数据从可搜索 Activity 返回到上一个 Activity

java - 我面临 Volley 超时错误和 mainThread 错误

java - Volley每次从SERVER而不是缓存获取数据

java - 如何对 drupal 表执行 Volley PUT

java - 树结构中的递归回溯

java - 将 Servlet 转换为 Struts2 操作类

java - 连接正忙于处理另一个 hstmt 的结果

android - 如何使用 RxAndroidBle 结合服务发现和读取特征