J'utilise Volley pour appeler une demande Web pour mon application. Mais comme je suis Volley pour la première fois. Je veux juste savoir comment télécharger des données multimédia image/vidéo via volley en utilisant plusieurs parties.
Je l'ai cherché sur de nombreux sites, j'ai obtenu des résultats
Comment envoyer un "multipart/form-data" POST in Android with Volley
Mais, ces méthodes ne semblent pas bonnes ou efficaces. Alors, s'il vous plaît, aidez-moi à télécharger des données multimédias à l'aide de volley. Ou je ne devrais pas utiliser Volley, et devrais opter pour l'approche manuelle précédente
Quoi qu'il en soit, toutes les pensées et réponses sont extrêmement appréciées. Merci de votre aide.
Je ne sais pas si vous avez une réponse, mais si vous n'avez pas essayé ceci:
import Java.io.ByteArrayOutputStream;
import Java.io.File;
import Java.io.IOException;
import Java.util.Map;
import org.Apache.http.HttpEntity;
import org.Apache.http.entity.mime.HttpMultipartMode;
import org.Apache.http.entity.mime.MultipartEntityBuilder;
import org.Apache.http.entity.mime.content.FileBody;
import com.Android.volley.AuthFailureError;
import com.Android.volley.NetworkResponse;
import com.Android.volley.Request;
import com.Android.volley.Response;
import com.Android.volley.VolleyLog;
public class MultipartRequest extends Request<String> {
// private MultipartEntity entity = new MultipartEntity();
MultipartEntityBuilder entity = MultipartEntityBuilder.create();
HttpEntity httpentity;
private static final String FILE_PART_NAME = "file";
private final Response.Listener<String> mListener;
private final File mFilePart;
private final Map<String, String> mStringPart;
public MultipartRequest(String url, Response.ErrorListener errorListener,
Response.Listener<String> listener, File file,
Map<String, String> mStringPart) {
super(Method.POST, url, errorListener);
mListener = listener;
mFilePart = file;
this.mStringPart = mStringPart;
entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
buildMultipartEntity();
}
public void addStringBody(String param, String value) {
mStringPart.put(param, value);
}
private void buildMultipartEntity() {
entity.addPart(FILE_PART_NAME, new FileBody(mFilePart));
for (Map.Entry<String, String> entry : mStringPart.entrySet()) {
entity.addTextBody(entry.getKey(), entry.getValue());
}
}
@Override
public String getBodyContentType() {
return httpentity.getContentType().getValue();
}
@Override
public byte[] getBody() throws AuthFailureError {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
httpentity = entity.build();
httpentity.writeTo(bos);
} catch (IOException e) {
VolleyLog.e("IOException writing to ByteArrayOutputStream");
}
return bos.toByteArray();
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
return Response.success("Uploaded", getCacheEntry());
}
@Override
protected void deliverResponse(String response) {
mListener.onResponse(response);
}
}
Pour le faire fonctionner, vous devez utiliser ceci Java httpclients: http://hc.Apache.org/downloads.cgi Au moment où j'écris ceci réponse (02/07/14) la version que j'utilise est 4.3.2.
J'espère que ça aide !
Vous devez utiliser le code ci-dessous pour télécharger une image en utilisant plusieurs parties avec volley. Cela fonctionne comme un charme dans mon application.
public class MultipartRequest extends Request<String> {
private MultipartEntity entity = new MultipartEntity();
private static final String FILE_PART_NAME = "file";
private static final String STRING_PART_NAME = "text";
private final Response.Listener<String> mListener;
private final File mFilePart;
private final String mStringPart;
public MultipartRequest(String url, Response.ErrorListener errorListener, Response.Listener<String> listener, File file, String stringPart)
{
super(Method.POST, url, errorListener);
mListener = listener;
mFilePart = file;
mStringPart = stringPart;
buildMultipartEntity();
}
private void buildMultipartEntity()
{
entity.addPart(FILE_PART_NAME, new FileBody(mFilePart));
try
{
entity.addPart(STRING_PART_NAME, new StringBody(mStringPart));
}
catch (UnsupportedEncodingException e)
{
VolleyLog.e("UnsupportedEncodingException");
}
}
@Override
public String getBodyContentType()
{
return entity.getContentType().getValue();
}
@Override
public byte[] getBody() throws AuthFailureError
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try
{
entity.writeTo(bos);
}
catch (IOException e)
{
VolleyLog.e("IOException writing to ByteArrayOutputStream");
}
return bos.toByteArray();
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response)
{
return Response.success("Uploaded", getCacheEntry());
}
@Override
protected void deliverResponse(String response)
{
mListener.onResponse(response);
}
}