package dk.slott.super_volley.requests; 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.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.toolbox.HttpHeaderParser; import dk.slott.super_volley.MainApplication; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Locale; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.message.BasicNameValuePair; import org.json.JSONObject; /** * Volley adapter for JSON requests that will be parsed into Java objects by Gson. */ public class FileRequest extends Request<File> { private static final String TAG = FileRequest.class.getSimpleName(); private final Listener<File> listener; private final String filename; /** * Make a request and return a parsed object from JSON. * Note that this request object supports caching! * * @param filename Filename on device. */ public FileRequest(final int method, final String url, final JSONObject jsonRequest, final String filename, final Listener<File> listener, final ErrorListener errorListener) { super(method, url, errorListener); this.listener = listener; this.filename = filename; } @Override protected void deliverResponse(final File response) { this.listener.onResponse(response); } /** */ @Override protected Response<File> parseNetworkResponse(final NetworkResponse response) { OutputStream out = null; InputStream in = null; try { Log.d(TAG, "parseNetworkResponse"); final File configFile = new File(MainApplication.FILE_REQUEST_PATH, this.filename); byte[] buf=new byte[1024]; int bytes_read = -1; out = new FileOutputStream(configFile, false); in = new ByteArrayInputStream(response.data); while ((bytes_read = in.read(buf)) != -1) { out.write(buf, 0, bytes_read); } out.flush(); return Response.success(configFile, HttpHeaderParser.parseCacheHeaders(response)); } catch (Exception e) { return Response.error(new ParseError(e)); } finally { if(out != null) try { out.close(); } catch (IOException e) { Log.e(TAG, "IOException: " + e); } if(in != null) try { in.close(); } catch (IOException e) { Log.e(TAG, "IOException: " + e); } } } /** * MSH: Let the server know what we are sending. */ @Override public String getBodyContentType() { return "application/x-www-form-urlencoded; charset=" + getParamsEncoding(); } /** * MSH: Convert supplied JSON body to a well formed POST body. * @throws AuthFailureError */ @Override public byte[] getBody() throws AuthFailureError { byte[] body = super.getBody(); if(body != null) { final String jsonBody = new String(body); final List<BasicNameValuePair> paramsAsList = new ArrayList<BasicNameValuePair>(); try { final JSONObject jObject = new JSONObject(jsonBody); final Iterator<?> keys = jObject.keys(); while(keys.hasNext()) { final String key = (String)keys.next(); paramsAsList.add(new BasicNameValuePair(key.toLowerCase(Locale.ENGLISH), ((String)jObject.get(key)))); } return URLEncodedUtils.format(paramsAsList, getParamsEncoding()).getBytes(getParamsEncoding()); } catch (Exception e) { Log.e(TAG, "Exception: " + e); } } return null; } /* public void arrayOfBytesToFile( String[] args ) { FileInputStream fileInputStream=null; File file = new File("C:\\testing.txt"); byte[] bFile = new byte[(int) file.length()]; try { //convert file into array of bytes fileInputStream = new FileInputStream(file); fileInputStream.read(bFile); fileInputStream.close(); //convert array of bytes into file FileOutputStream fileOuputStream = new FileOutputStream("C:\\testing2.txt"); fileOuputStream.write(bFile); fileOuputStream.close(); System.out.println("Done"); }catch(Exception e){ e.printStackTrace(); } } */ }