我正在嘗試爲研究生課程的最終任務創建新聞查看部分。 這是什麼(UserNewsActivity)所做的就是通過對獲取的數據創建調用我的方法,像這樣:Android Volley在200狀態代碼上拋出錯誤
ListView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_news);
InstanciateListViewValues();
}
,並從API獲取數據我在ASP.NET的網絡API 2中創建(原因也有Web部件MVC)。
獲取的數據應該存儲在「Global.NewsItemsList」中的靜態變量var中,之後我使用數據填充我的(自定義)ListView 。 問題是,我經常收到錯誤200的回覆:
E/Volley: [110] BasicNetwork.performRequest: Unexpected response code 200 for http://192.168.56.1:5000/News/GetNews
I/System.out: NetworkError
,有時它只是工作:S 我100%肯定我得到正確的數據(在瀏覽器中檢查200種狀態(OK),檢查底部鏈接), 和我已經用相同的方式在項目之前抽取更多的數據,並且它在100%的時間內工作。 方法看起來像這樣:
private void InstanciateListViewValues() {
if (Global.NewsItemsList == null) {
final String url = ApiLink + "/News/GetNews";
RequestQueue queue = Volley.newRequestQueue(this);
JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Iterator<String> keys = response.keys();
String str_Name = keys.next();
String jsonString = response.optString(str_Name);
Gson gson = new Gson();
Global.NewsItemsList = gson.fromJson(jsonString, new TypeToken<List<NewsDetailsViewModel>>() {
}.getType());
setAdapterData();
} catch (Exception e) {
System.out.println(e.getMessage());
Toast.makeText(UserNewsActivity.this, "An error occured, please try later.",
Toast.LENGTH_SHORT).show();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(UserNewsActivity.this, "An error occured, please try later.",
Toast.LENGTH_SHORT).show();
//System.out.println(error.getMessage());//if left uncommented will break app
if (error instanceof TimeoutError || error instanceof NoConnectionError) {
System.out.println("TimeoutError || NoConnectionError");
} else if (error instanceof AuthFailureError) {
System.out.println("AuthFailureError");
} else if (error instanceof ServerError) {
System.out.println("ServerError");
} else if (error instanceof NetworkError) {
System.out.println("NetworkError");
NetworkResponse response = error.networkResponse;
if (error instanceof ServerError && response != null) {
try {
String res = new String(response.data,
HttpHeaderParser.parseCharset(response.headers, "utf-8"));
JSONObject obj = new JSONObject(res);
System.out.println(obj.toString());
} catch (UnsupportedEncodingException e1) {
System.out.println(e1.getMessage());
e1.printStackTrace();
} catch (JSONException e2) {
System.out.println(e2.getMessage());
e2.printStackTrace();
}
catch (Exception e3) {
System.out.println(e3.getMessage());
e3.printStackTrace();
}
}
} else if (error instanceof ParseError) {
System.out.println("ParseError");
}
}
}
);
queue.add(getRequest);
} else {
setAdapterData();
}
}
如果值得注意我使用VisualStudio的本地運行我的服務,然後使用IISExpress來代理我的口,最後用Genymotion作爲模擬器。
爲了保持這個問題清潔,這裏是連接到引擎收錄,與全球和NewsItemsList類和從網絡API響應:https://pastebin.com/5Za6yLDP
記錄整個異常和堆棧跟蹤,而不僅僅是消息 – njzk2
catch(Exception e){'非常苛刻。嘗試捕捉一些*特定*異常 –
@ cricket_007「catch(Exception e){」部分是如果gson無法反序列化JSON。 – Kadaj