I've implemented something similar to this, and it's relatively simple. Your log message is printing out what looks like gibberish, because response.data
is really a byte array - not a String
. Also, a VolleyError
is really just an extended Exception
, so Exception.getMessage() likely wouldn't return what you are looking for unless you override the parsing methods for parsing your VolleyError
in your extended Request
class. A really basic way to handle this would be to do something like:
//In your extended request class
@Override
protected VolleyError parseNetworkError(VolleyError volleyError){
if(volleyError.networkResponse != null && volleyError.networkResponse.data != null){
VolleyError error = new VolleyError(new String(volleyError.networkResponse.data));
volleyError = error;
}
return volleyError;
}
}
If you add this to your extended Request
classes, your getMessage()
should at least not return null. I normally don't really bother with this, though, since it's easy enough to do it all from within your onErrorResponse(VolleyError e)
method.
You should use a JSON library to simplify things -- I use Gson for example or you could use Apache's JSONObject
s which shouldn't require an additional external library. The first step is to get the response JSON sent from your server as a String
(in a similar fashion to what I just demonstrated), next you can optionally convert it to a JSONObject (using either apache's JSONObject
s and JsonArray
s, or another library of your choice) or just parse the String
yourself. After that, you just have to display the Toast
.
Here's some example code to get you started:
public void onErrorResponse(VolleyError error) {
String json = null;
NetworkResponse response = error.networkResponse;
if(response != null && response.data != null){
switch(response.statusCode){
case 400:
json = new String(response.data);
json = trimMessage(json, "message");
if(json != null) displayMessage(json);
break;
}
//Additional cases
}
}
public String trimMessage(String json, String key){
String trimmedString = null;
try{
JSONObject obj = new JSONObject(json);
trimmedString = obj.getString(key);
} catch(JSONException e){
e.printStackTrace();
return null;
}
return trimmedString;
}
//Somewhere that has access to a context
public void displayMessage(String toastString){
Toast.makeText(context, toastString, Toast.LENGTH_LONG).show();
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…