quelqu'un a un exemple, où vous lisez un protobuf, en utilisant volley ?. J'ai lu que vous pouvez implémenter la classe ProtobufRequest, mais je ne peux pas trouver de documentation pour cela. Merci de votre aide.comment demander protobuf en utilisant volley?
Répondre
Ce n'est pas un exemple et je n'ai pas (encore) fait moi-même, mais voici comment je le ferais:
Une façon est d'étendre JsonObjectRequest et sérialisation et la désérialisation chaque tampon de protocole JSON en utilisant:
Message someProto = SomeProto.getDefaultInstance();
String jsonFormat = JsonFormat.printToString(someProto);
Message.Builder builder = SomeProto.newBuilder();
String jsonFormat = _load json document from a source_;
JsonFormat.merge(jsonFormat, builder);
Voir: https://code.google.com/p/protobuf-java-format/
Sinon, si vous voulez envoyer le tampon protocole serialize à octet [], vous pouvez étendre Request<T>
. Le vous devez remplacer public byte[] getBody()
pour le corps de la demande/charge utile, et protégé Response<Message> parseNetworkResponse(NetworkResponse response)
pour la réponse.
Vous utiliserez ensuite les fonctions suivantes pour sérialiser le tampon de protocole.
byte[] toByteArray();
parseFrom(byte[] data);
Si vous avez une solution, n'oubliez pas de partager.
Je l'ai fait, le travail est ok, j'espère qu'il est utile.first créer la classe ProtobufRequest comme ci-dessous qui étend Request, Request est la classe de base requête dans Volley, alors, vous pouvez créer la demande personnalisée étend ProtobufRequest doParse personnalisé(). juste comme référence.
RequestData est SomeProto message,
private static final int SOCKET_TIMEOUT = 30000;
/** Content type for request. */
private static final String PROTOCOL_CONTENT_TYPE = "application/x-protobuf";
private static final Object sDecodeLock = new Object();
private RequestData mRequestData;
private BaseCallback mCallback;
public ProtobufRequest(RequestData data, BaseCallback callback) {
super(Method.POST, Constants.SERVER_URL, callback);
// TODO Auto-generated constructor stub
mRequestData = data;
mCallback = callback;
this.setRetryPolicy(getRetryPolicy());
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Charset", "UTF-8");
headers.put("Content-Type", "application/x-protobuf");
headers.put("Accept", "application/x-protobuf");
return headers;
}
@Override
public String getBodyContentType() {
return PROTOCOL_CONTENT_TYPE;
}
@Override
public RetryPolicy getRetryPolicy() {
RetryPolicy retryPolicy = new DefaultRetryPolicy(SOCKET_TIMEOUT,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
return retryPolicy;
}
/**
** write the protobuf data to http request,it is very important
*/
@Override
public byte[] getBody() throws AuthFailureError {
if (mRequestData == null) {
return super.getBody();
} else {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
baos.write(mRequestData.toByteArray());
} catch (IOException e) {
return super.getBody();
}
return baos.toByteArray();
}
}
@Override
protected void deliverResponse(Object arg0) {
mCallback.onResponse(arg0);
}
/**
** parse the response result
*/
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
synchronized (sDecodeLock) {
try {
return doParse(response, HttpHeaderParser.parseCacheHeaders(response));
} catch (OutOfMemoryError e) {
return Response.error(new ParseError(e));
}
}
}
abstract protected Response<T> doParse(NetworkResponse response, Entry entry)
public interface BaseCallback extends Listener<Object>, ErrorListener {
}
juste coller ce ici dans le cas où il est utile: J'ai cherché autour d'un lot pour une façon générique de faire quelque chose de similaire à la réponse de jeff wang. Je n'ai rien trouvé alors j'ai écrit ça. Permettez-moi de savoir si vous avez un moyen de se débarrasser de la distribution non contrôlée là-dedans ...
ProtobufRequest.java
public class ProtoBufRequest<ReqT extends Message, RespT extends Message> extends Request<RespT> { private ReqT request; private final Class<RespT> responseType; private final Listener<RespT> listener; private static final String PROTOCOL_CONTENT_TYPE = "application/x-protobuf"; private static final int SOCKET_TIMEOUT = 30000; public ProtoBufRequest(int method, String url, ReqT data, Class<RespT> responseType, Listener<RespT> listener, Response.ErrorListener errorListener) { super(method, url, errorListener); this.listener = listener; this.request = data; this.responseType = responseType; } @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = new HashMap<String, String>(); headers.put("Charset", "UTF-8"); headers.put("Content-Type", PROTOCOL_CONTENT_TYPE); headers.put("Accept", PROTOCOL_CONTENT_TYPE); return headers; } @Override public byte[] getBody() throws AuthFailureError { if (request == null) { return super.getBody(); } return request.toByteArray(); } @Override protected Response<RespT> parseNetworkResponse(NetworkResponse response) { try { if (responseType == null) { throw new IllegalArgumentException("The response type was never provided."); } RespT responseInstance = responseType.newInstance(); return (Response<RespT>) Response.success( responseInstance.newBuilderForType().mergeFrom(response.data).build(), HttpHeaderParser.parseCacheHeaders(response)); } catch (Exception e) { e.printStackTrace(); return Response.error(new ParseError(e)); } } @Override public String getBodyContentType() { return PROTOCOL_CONTENT_TYPE; } @Override public RetryPolicy getRetryPolicy() { RetryPolicy retryPolicy = new DefaultRetryPolicy(SOCKET_TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); return retryPolicy; } @Override protected void deliverResponse(RespT response) { listener.onResponse(response); } }
De: cmcneil Ajout de code en cas de pourriture lien. Il devrait y avoir une mise en œuvre officielle par Volley ou des tampons de protocole par la suite ainsi s'il vous plaît mettre à jour cela si nécessaire.
import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
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.Listener;
import com.android.volley.RetryPolicy;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.protobuf.MessageLite;
import java.util.HashMap;
import java.util.Map;
/**
* Created by [email protected] on 5/10/15.
*/
public class ProtoBufRequest<ReqT extends MessageLite, RespT extends MessageLite> extends Request<RespT> {
private ReqT request;
private final Class<RespT> responseType;
private final Listener<RespT> listener;
private static final String PROTOCOL_CONTENT_TYPE = "application/x-protobuf";
private static final int SOCKET_TIMEOUT = 30000;
public ProtoBufRequest(int method, String url, ReqT data, Class<RespT> responseType,
Listener<RespT> listener, Response.ErrorListener errorListener) {
super(method, url, errorListener);
this.listener = listener;
this.request = data;
this.responseType = responseType;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Charset", "UTF-8");
headers.put("Content-Type", PROTOCOL_CONTENT_TYPE);
headers.put("Accept", PROTOCOL_CONTENT_TYPE);
return headers;
}
@Override
public byte[] getBody() throws AuthFailureError {
if (request == null) {
return super.getBody();
}
return request.toByteArray();
}
@Override
protected Response<RespT> parseNetworkResponse(NetworkResponse response) {
try {
if (responseType == null) {
throw new IllegalArgumentException("The response type was never provided.");
}
RespT responseInstance = responseType.newInstance();
return (Response<RespT>) Response.success(
responseInstance.newBuilderForType().mergeFrom(response.data).build(),
HttpHeaderParser.parseCacheHeaders(response));
} catch (Exception e) {
e.printStackTrace();
return Response.error(new ParseError(e));
}
}
@Override
public String getBodyContentType() {
return PROTOCOL_CONTENT_TYPE;
}
@Override
public RetryPolicy getRetryPolicy() {
RetryPolicy retryPolicy = new DefaultRetryPolicy(SOCKET_TIMEOUT,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
return retryPolicy;
}
@Override
protected void deliverResponse(RespT response) {
listener.onResponse(response);
}
}
- 1. GET Demander des paramètres en utilisant Volley
- 2. Demander Delete using Volley Android
- 3. Demande en utilisant volley
- 4. Android Volley Demander Identity onErrorResponse Section
- 5. comment analyser JSON en utilisant Volley
- 6. Comment retourner un JSONObject en utilisant Volley
- 7. Comment télécharger une image en utilisant Volley?
- 8. Comment implémenter ceci (BufferedWriter) en utilisant Volley?
- 9. Comment afficher/demander un objet JSON avec Android Volley?
- 10. fenêtre fuite en utilisant volley
- 11. Post Array en utilisant volley
- 12. Netty, ProtoBuf, WebSocket; comment convertir BinaryWebSocketFrame en type protobuf?
- 13. Comment demander RTVolume en utilisant IB py
- 14. Projets utilisant Protobuf
- 15. Sérialisation de flux d'images en utilisant protobuf
- 16. Comment poster JSON en volley en utilisant android?
- 17. comment envoyer tableau de paramètres en utilisant volley en android
- 18. faire 2 JsonObjectRequests en utilisant volley
- 19. Android - Image cache en utilisant volley
- 20. android expandablelistview utilisant volley
- 21. Comment convertir une représentation JSON de protobuf en protobuf?
- 22. Conversion Python Protobuf en C++ en utilisant les fonctions Protobuf SerializeToString() et parseFromString()
- 23. En utilisant ProtoBuf-Net, comment (dé) sérialiser un tableau multidimensionnel?
- 24. Comment créer des instances protobuf en utilisant la réflexion java?
- 25. Comment ajouter une énumération en utilisant protobuf-net dans VB.NET?
- 26. Comment construire protobuf-c dans Windows en utilisant MINGW?
- 27. Comment implémenter la structure de carte en utilisant Google Protobuf
- 28. Comment écrire ces classes en utilisant protobuf de Google?
- 29. Listview ne fonctionne pas en utilisant volley
- 30. objet JSON Stockage en utilisant Volley