0

我想从我的片段之一中使用Volley从下面的url解析json。问题是“onResponse”没有激活。我尝试用Log和Toast Notification来捕获异常。没有任何异常。看起来OnResponse在片段中不起作用。从url中解析json与在Android中的片段排球

这是我的片段。

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基本模板。感谢您的帮助提前。

回答

1

您错过了对请求进行排队的调用。在您的片段的return view之前添加此行

rq.add(stringRequest); 
+0

非常感谢您的快速回复。它像一个魅力。 – oneNiceFriend

+0

很高兴我可以帮助:) –

1

你应该写一个单独的类制作,以避免重复代码的请求。此外,你可以减少这种错误。这将是一个很好的编码习惯。

+0

感谢您的建议。你有任何代码示例显示? – oneNiceFriend