Java 从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

我有一个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) {

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