Java 从JSON截取请求中获取值的正确方法是什么?
我有一个JSON请求,如下所示:Java 从JSON截取请求中获取值的正确方法是什么?,java,android,android-volley,inner-classes,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 respon
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) {
}
}
JsonObjectRequest-request=新的JsonObjectRequest(request.Method.GET,
网址,
(字符串)null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
roomArray=parseRoomsResponse(响应);
callback.onSuccess(roomArray);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
}
这个请求在onCreateView()
方法中,我的parseRoomsResponse()
方法返回一个ArrayList
,我希望在onCreateView()
中使用它,那么正确的方法是什么呢
我知道没关系,我必须在成功的内部类中处理好所有的事情, 是否有某种方法可以获取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);
}
是的,在我看来没问题。我通常就是这样做的。我知道没问题,我必须处理onSuccess内部类中的所有事情,有没有办法将值获取到onCreateView?没有。这就是Asynchronous的意思。我能让我的程序在继续之前等待响应吗,对我来说没问题,还是我必须使用onSuccess解决这个问题?Thx,你帮了我很多,yo你最好的:)很高兴它帮助了你。如果答案解决了您的问题,请记住将其标记为已接受。
@Override
public void onResponse(JSONObject response) {
myParsedArray = parseResponse(response);
updateViews(myParsedResponse);
...
}