2016-05-16 74 views
-1

在Android中,我提出的HTTP文件上傳請求到服務器如下讀JSON數據

MultipartRequest multipartRequest = new MultipartRequest(uploadUrl, null, mimeType, multipartBody, new Response.Listener<NetworkResponse>() { 
     @Override 
     public void onResponse(NetworkResponse response) { 
      // Need to read Json response here 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.d(GlobalClass.TAG, "File not uploaded"); 
     } 
    }); 
    GlobalClass.getInstance().addToRequestQueue(multipartRequest); 
} 

的響應是以下結構的:

{ 
    'response': 'some_data_to_be_used' 
} 

這是我MultipartRequest類:

package com.xxxxxx.xxxxxx; 


import android.util.Log; 

import com.android.volley.AuthFailureError; 
import com.android.volley.NetworkResponse; 
import com.android.volley.ParseError; 
import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.HttpHeaderParser; 


import java.util.Map; 

class MultipartRequest extends Request<NetworkResponse> { 
    private final Response.Listener<NetworkResponse> mListener; 
    private final Response.ErrorListener mErrorListener; 
    private final Map<String, String> mHeaders; 
    private final String mMimeType; 
    private final byte[] mMultipartBody; 

    public MultipartRequest(String url, Map<String, String> headers, String mimeType, byte[] multipartBody, Response.Listener<NetworkResponse> listener, Response.ErrorListener errorListener) { 
     super(Method.POST, url, errorListener); 
     this.mListener = listener; 
     this.mErrorListener = errorListener; 
     this.mHeaders = headers; 
     this.mMimeType = mimeType; 
     this.mMultipartBody = multipartBody; 
    } 

    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     return (mHeaders != null) ? mHeaders : super.getHeaders(); 
    } 

    @Override 
    public String getBodyContentType() { 
     return mMimeType; 
    } 

    @Override 
    public byte[] getBody() throws AuthFailureError { 
     return mMultipartBody; 
    } 

    @Override 
    protected Response<NetworkResponse> parseNetworkResponse(NetworkResponse response) { 
     try { 
      return Response.success(
        response, 
        HttpHeaderParser.parseCacheHeaders(response)); 
     } catch (Exception e) { 
      return Response.error(new ParseError(e)); 
     } 
    } 

    @Override 
    protected void deliverResponse(NetworkResponse response) { 
     Log.d(GlobalClass.TAG, response.toString()); 
     mListener.onResponse(response); 
    } 

    @Override 
    public void deliverError(VolleyError error) { 
     mErrorListener.onErrorResponse(error); 
    } 
} 

在我的parseNetworkResponse方法,我已經竭力試圖他如下:

protected Response<NetworkResponse> parseNetworkResponse(NetworkResponse response) { 
    try { 
     Log.d(GlobalClass.TAG, response.toString()); 
     String json = new String(response.data, HttpHeaderParser.parseCacheHeaders(response)); 
     return Response.success(
       response, 
       HttpHeaderParser.parseCacheHeaders(response)); 
    } catch (Exception e) { 
     return Response.error(new ParseError(e)); 
    } 
} 

我從here得到。 但這給了我錯誤Cannot resolve constructor String(byte[],com.android.volley.Cache.Entry)

如何讀取JSON響應對象並將response作爲字符串的值使用?

回答

1

更新

正如你所提供的鏈接中提到,你應該改變這一行:

String json = new String(response.data, HttpHeaderParser.parseCacheHeaders(response)); 

String json = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 

這是因爲String類沒有任何contructor匹配您在代碼中使用的那個,