我有一个看起来像这样的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()
内使用的git push
,那么正确的方法是什么做这件事?
答案 0 :(得分:1)
啊,啊,我现在看到你问题了。我知道它没关系,我必须在onSuccess内部类中处理内容, 是否有某种方法可以获取onCreateView的值? - Zoltan Kurtyak
这里的问题是请求需要一段未知的时间来返回响应,因此Volley会为您异步发出这些请求,而不是锁定您的UI线程。
因此,如果您在onCreateView
中提出请求,那么当您收到回复时,您不可能仍然在onCreateView
。
您可能需要重新考虑代码流。如果您的片段视图取决于请求的响应,那么您应该确保在创建片段视图之前执行请求并获取响应。
解决此问题的典型方法是在收到响应之前使用占位符值。例如:
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);
...
}