gpt4 book ai didi

android - 如何使用 volley 请求 protobuf?

转载 作者:行者123 更新时间:2023-11-29 21:41:11 24 4
gpt4 key购买 nike

任何人都有一个示例,您在其中使用 volley 读取 protobuf?。我读过你可以实现 ProtobufRequest 类,但我找不到它的文档。感谢您的帮助。

最佳答案

我已经完成了,工作没问题,希望它有帮助。首先创建如下扩展请求的 ProtobufRequest 类,Request 是 Volley 中的基本请求类,然后​​,您可以创建自定义请求扩展 ProtobufRequest 做自定义 doParse()。仅供引用。

RequestData 是 SomeProto 消息,

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 {

}

关于android - 如何使用 volley 请求 protobuf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17057649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com