我使用Volley库从雅虎财经获取数据。但是10-25%的时间它会在onErrorResponse(VolleyError错误)方法中返回错误。
java.net.UnknownHostException:无法解析主机" query.yahooapis.com":没有与主机名关联的地址
有趣的是,只有在3G上使用wifi才能完美运行。通过做一些研究,我发现这个Exception Thrown表示主机的IP地址无法确定或设备连接到有效的wifi但路由器没有接收到互联网。但是,当我的应用程序开始逐一向我提供这些错误时,我可以轻松启动另一个基于互联网的应用程序(如youtube),它们将正常工作。我99%支持这不是wifi问题,因为:1)我已经尝试了3个不同的地方连接到wifi(所有与不同的互联网提供商)。 2)具有不同Android版本的4种不同设备。 3)来自不同国家的许多用户报告此问题。它经常发生。 我的截击码。
public class VolleySingleton {
private static VolleySingleton sInstance = null;
private RequestQueue mRequestQueue;
private VolleySingleton() {
mRequestQueue = Volley.newRequestQueue(MyApplication.getAppContextFromAppInstanse());
}
public static VolleySingleton getInstance() {
if (sInstance == null) {
sInstance = new VolleySingleton();
}
return sInstance;
}
public RequestQueue getRequestQueue() {
return mRequestQueue;
}
}
private void getData(String request) {
RequestQueue requestQueue = VolleySingleton.getInstance().getRequestQueue();
startRefreshingAnimation();
StringRequest stringRequest = new StringRequest(Request.Method.GET, request, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
mQuote = QuoteJSONParser.parseFeedOneQuote(response);
if (mQuote != null) {
//do stuff with data
} else {
// load from db
}
stopRefreshingAnimation(1200);
}
}, new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//java.net.UnknownHostException: Unable to resolve host "query.yahooapis.com": No address associated with hostname
// notify user about the error
stopRefreshingAnimation(1200);
}
});
requestQueue.add(stringRequest);
}