我正在运行带有一些MP3文件的Django服务器,并且已对其进行设置,因此我可以发送带有所需文件的“ songId”的JSON请求,并返回指定的MP3。
当我在Postman上尝试该方法时可以使用,但是我不知道如何在Android上使用Volley来接收它。每当我尝试从JSON更改响应对象时,都会收到错误消息。感谢您的任何帮助,谢谢!
编辑:这是我通常用于获取JSON响应的代码
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
try {
JSONObject jsonObject = new JSONObject().put("songId", "43");
JsonObjectRequest objectRequest = new JsonObjectRequest(
com.android.volley.Request.Method.POST,
url,
jsonObject,
new com.android.volley.Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.e("REST Response", response.toString());
}
},
new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("REST Error", error.toString());
}
})
{
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
SharedPreferences sharedPreferences = getSharedPreferences("StoredValues", MODE_PRIVATE);
String token = sharedPreferences.getString("token", "null");
headers.put("Authorization", "Token " + token);
return headers;
}
};
objectRequest.setRetryPolicy(new RetryPolicy() {
@Override
public int getCurrentTimeout() {
return 10000;
}
@Override
public int getCurrentRetryCount() {
return 10000;
}
@Override
public void retry(VolleyError error) throws VolleyError {
Log.e("Volley error", error.toString());
}
});
requestQueue.add(objectRequest);
} catch (JSONException e){
Log.e("JSON Response", e.toString());
}
答案 0 :(得分:0)
您可以使用此自定义请求类下载文件
class InputStreamVolleyRequest extends Request<byte[]> {
private final Response.Listener<byte[]> mListener;
private Map<String, String> mParams;
//create a static map for directly accessing headers
public Map<String, String> responseHeaders ;
public InputStreamVolleyRequest(int method, String mUrl ,Response.Listener<byte[]> listener,
Response.ErrorListener errorListener, HashMap<String, String> params) {
// TODO Auto-generated constructor stub
super(method, mUrl, errorListener);
// this request would never use cache.
setShouldCache(false);
mListener = listener;
mParams=params;
}
@Override
protected Map<String, String> getParams()
throws com.android.volley.AuthFailureError {
return mParams;
};
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Content-Type", "application/json");
return params;
}
@Override
protected void deliverResponse(byte[] response) {
mListener.onResponse(response);
}
@Override
protected Response<byte[]> parseNetworkResponse(NetworkResponse response) {
//Initialise local responseHeaders map with response headers received
responseHeaders = response.headers;
//Pass the response data here
return Response.success( response.data, HttpHeaderParser.parseCacheHeaders(response));
}
}
并可以这样发出您的请求
String mUrl= <YOUR_URL>;
HashMap<String,String>hasMap = new HashMap<>();
hashMap.put("songId","1");
InputStreamVolleyRequest request = new InputStreamVolleyRequest(Request.Method.GET, mUrl,
new Response.Listener<byte[]>() {
@Override
public void onResponse(byte[] response) {
// TODO handle the response
try {
if (response!=null) {
FileOutputStream outputStream;
String name=<FILE_NAME_WITH_EXTENSION e.g reference.txt>;
outputStream = openFileOutput(name, Context.MODE_PRIVATE);
outputStream.write(response);
outputStream.close();
Toast.makeText(this, "Download complete.", Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("KEY_ERROR", "UNABLE TO DOWNLOAD FILE");
e.printStackTrace();
}
}
} ,new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO handle the error
error.printStackTrace();
}
}, hashmap);
RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext(), new HurlStack());
mRequestQueue.add(request);