我想在我的片段之一中使用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基本模板。感谢您的帮助。
答案 0 :(得分:1)
您缺少对请求进行排队的调用。在片段中的return view
之前添加 行
rq.add(stringRequest );
答案 1 :(得分:1)
您应该编写一个单独的类来发出请求以避免重复代码。此外,您可以减少此类错误。这将是一个很好的编码实践。