简体   繁体   中英

Parsing json from url with Volley in a Fragment in Android

I want to parse json from the url below with Volley in one of my Fragment. The problem is that the "onResponse" does not activated. I tried to catch exception with Log and with Toast Notification. No any exception as well. It seems OnResponse doesnt fire in Fragment.

This is my 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;
}

}

This is how I navigate to the Fragment from Main Activity.

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

I am using Android Navigation Drawer basic template. Thanks for your help in advance.

You are missing the call to en-queue the request. Add this line before the return view in your Fragment :

rq.add(stringRequest );

You should write a separate class for making a request to avoid duplicate code. Also, you can reduce such mistakes. It will be a good coding practice.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM