我有一个如下所示的 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()
方法返回一个我希望使用的 ArrayList
在 onCreateView()
中,那么做这件事的正确方法是什么?
最佳答案
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/