BasicNetwork.performRequest - android 6.0.1 中的意外响应代码 400 但不是模拟器
BasicNetwork.performRequest - Unexpected response code 400 in android 6.0.1 but not on emulator
我在我的 android 三星上尝试了以下代码,但它给出了错误。 (我想获取频道属性)
String URL = "https://www.googleapis.com/youtube/v3/search?hl=tr_TR&part=snippet&q=" + channel + "&type=channel&safeSearch=moderate&maxResults=1&key=xxxxxx";
StringRequest stringRequest = new StringRequest(StringRequest.Method.GET, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("items");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject item = jsonArray.getJSONObject(i);
JSONObject snippet = item.getJSONObject("snippet");
String channelId = snippet.getString("channelId");
//getVideo(channelId);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Log.e("Error", error.getMessage());
// Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
}
}
);
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
requestQueue.add(stringRequest);
它给出了这个错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.cocuklaricin.junioryoutube, PID: 13820
java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.e(Log.java:334)
at com.cocuklaricin.junioryoutube.MainActivity.onErrorResponse(MainActivity.java:127)
at com.android.volley.Request.deliverError(Request.java:617)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:104)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7225)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
I/qtaguid: Untagging socket 45
E/Volley: [4518] BasicNetwork.performRequest: Unexpected response code 400 for https://www.googleapis.com/youtube/v3/search?hl=tr_TR&part=snippet&q=Cartoon Network Türkiye&type=channel&safeSearch=moderate&maxResults=1&key=xxxx
但是当我在我的模拟器上尝试时,它工作正常。
有什么区别?我该如何解决这个错误?
提前致谢
尝试在使用前检查 null
error.getMessage()
如下所示
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if(error.getMessage==null){
Toast.makeText(MainActivity.this, "Failed to retrieve data", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(MainActivity.this, error.getMessage().toString(), Toast.LENGTH_LONG).show();
}
});
也别忘了把它转换成字符串,比如error.getMessage().toString();
更新
确保你的 url
不应该包含任何空白 space 所以
在我看来,您可以将输入 channel
中的任何 space 替换为 %20
,例如 Cartoon%20Network%20Türkiye
那么这个 url
将有效。
我在我的 android 三星上尝试了以下代码,但它给出了错误。 (我想获取频道属性)
String URL = "https://www.googleapis.com/youtube/v3/search?hl=tr_TR&part=snippet&q=" + channel + "&type=channel&safeSearch=moderate&maxResults=1&key=xxxxxx";
StringRequest stringRequest = new StringRequest(StringRequest.Method.GET, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("items");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject item = jsonArray.getJSONObject(i);
JSONObject snippet = item.getJSONObject("snippet");
String channelId = snippet.getString("channelId");
//getVideo(channelId);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Log.e("Error", error.getMessage());
// Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
}
}
);
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
requestQueue.add(stringRequest);
它给出了这个错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.cocuklaricin.junioryoutube, PID: 13820
java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.e(Log.java:334)
at com.cocuklaricin.junioryoutube.MainActivity.onErrorResponse(MainActivity.java:127)
at com.android.volley.Request.deliverError(Request.java:617)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:104)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7225)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
I/qtaguid: Untagging socket 45
E/Volley: [4518] BasicNetwork.performRequest: Unexpected response code 400 for https://www.googleapis.com/youtube/v3/search?hl=tr_TR&part=snippet&q=Cartoon Network Türkiye&type=channel&safeSearch=moderate&maxResults=1&key=xxxx
但是当我在我的模拟器上尝试时,它工作正常。
有什么区别?我该如何解决这个错误?
提前致谢
尝试在使用前检查 null
error.getMessage()
如下所示
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if(error.getMessage==null){
Toast.makeText(MainActivity.this, "Failed to retrieve data", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(MainActivity.this, error.getMessage().toString(), Toast.LENGTH_LONG).show();
}
});
也别忘了把它转换成字符串,比如error.getMessage().toString();
更新
确保你的 url
不应该包含任何空白 space 所以
在我看来,您可以将输入 channel
中的任何 space 替换为 %20
,例如 Cartoon%20Network%20Türkiye
那么这个 url
将有效。