Android Volley 错误抛出 200 状态代码

标签 android android-volley

我正在尝试创建一个新闻查看部分,作为我研究生学习的最终任务。 这个 (UserNewsActivity) 所做的是通过调用我的方法在创建时获取数据,如下所示:

ListView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_news);

    InstanciateListViewValues();
}

并从我在 Asp .Net Web Api 2 中创建的 api 中获取数据(因为 mvc 中也有 web 部件)。

然后应将获取的数据存储在“Global.NewsItemsList”中的静态变量中,然后填充我的(自定义)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 状态(正常),检查底部链接), 我以前在项目中以同样的方式使用 volley 来获取更多数据,并且它在 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 作为模拟器。

为了保持这个问题的清晰,这里是 pastebin 的链接,带有 Global 和 NewsItemsList 类以及来自 Web api 的响应:https://pastebin.com/5Za6yLDP

最佳答案

海吉·卡达吉
我只是在看你的代码,但最引起我注意的是“如果值得注意的话,我正在使用 VisualStudio 在本地运行我的服务,然后使用 IISExpress 代理我的端口,最后使用 Genymotion 作为模拟器。”
我遇到过如果您使用 iisexpress-proxy 的第一个地址(在我的例子中是 192.168.0.1),有时该代理将无法工作,因为这通常是网关地址。
为了正确测试这个问题,请看一下这个问题(Configure IIS Express for external access to VS2010 project),然后它应该可以正常工作(至少它对我有用 :D)。

关于Android Volley 错误抛出 200 状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43356026/

相关文章:

android - 在哪里放置AsyncTask

java - PHP 解析错误 JSON 异常并具有冗余值 - 无法获取 Datacom

android - 在主 Activity 中监听 Fragment onClicks

java - 添加 Firebase 依赖项时出错

android - 通过 Volley 无法使用 POST 将数据发送到服务器

Android Volley 将 Array 作为参数与 String 一起发送

android - 使用 volley 调用 WebAPI

android - Volley StringRequest 响应更改撇号的值(' 更改为 â)

java - 检查两个数组android之间的相同值

java - libgdx 中的线程化和移动 Sprite 的一般问题