在Android中的片段中使用Volley从url解析json

时间:2016-02-27 17:42:36

标签: android json android-fragments android-studio android-volley

我想在我的片段之一中使用Volley从下面的url解析json。问题是" onResponse"没有激活。我试图通过Log和Toast Notification捕获异常。也没有任何例外。似乎OnResponse并没有在Fragment中解雇。

这是我的片段。

public class PlacesToVisitFragment extends Fragment {

public PlacesToVisitFragment() {
    // Required empty public constructor
}

StringBuilder sb = new StringBuilder();

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

    View view = inflater.inflate(R.layout.fragment_places_to_visit, container, false);

    final TextView txt=  (TextView)view.findViewById(R.id.textView8);

    RequestQueue rq = Volley.newRequestQueue(getActivity().getApplicationContext());

    String url= "http://www.flightradar24.com/AirportInfoService.php?airport=ORY&type=in";

    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    // Do something with the response

                    try{

                        JSONObject o = new JSONObject(response);
                        JSONArray values=o.getJSONArray("flights");

                        for ( int i=0; i< values.length(); i++) {

                            JSONObject sonuc = values.getJSONObject(i);

                            sb.append("Flight: " + sonuc.getString("flight") + "\n");
                            sb.append("name: " + sonuc.getString("name") + "\n\n");

                        }

                        txt.setText(sb.toString());


                    }  catch (JSONException ex){}

                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    // Handle error
                }
            });



    // Inflate the layout for this fragment
    return  view;
}

}

这是我从主要活动导航到片段的方式。

if (id == R.id.nav_camera) {
        PlacesToVisitFragment fragment = new PlacesToVisitFragment();
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.mainFrame, fragment);
        ft.addToBackStack(null);
        ft.commit();
    }

我正在使用Android Navigation Drawer基本模板。感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您缺少对请求进行排队的调用。在片段中的return view 之前添加

rq.add(stringRequest );

答案 1 :(得分:1)

您应该编写一个单独的类来发出请求以避免重复代码。此外,您可以减少此类错误。这将是一个很好的编码实践。