在库中使用 volley 库
Using volley library inside a library
我想创建一个库来减少我在每个 android 项目上的重复网络工作,甚至将我的 jar 提供给其他开发人员使用我的方法进行网络通信。
所以我构建了这个:
import java.util.Map;
import org.json.JSONObject;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request.Method;
import com.android.volley.Request.Priority;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
public class RequestResp {
private final static String WEB_SERVICE_URL = "http://blabla/api";
private final Priority priorityImmediatelly = Priority.IMMEDIATE;
private final Priority priorityHigh = Priority.HIGH;
private final Priority priorityNORMAL = Priority.NORMAL;
private String tag_req_default = "tag_req_default";
VolleyCustomRequest mVolleyCustomReq;
DefaultRetryPolicy drp = new DefaultRetryPolicy(15000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
public /*JSONObject*/ void sendParamsAsHighPriority(Map<String, String> params) {
mVolleyCustomReq = new VolleyCustomRequest(Method.POST,
WEB_SERVICE_URL, params, new Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if (response != null) {
}
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(tag_req_default, error.getMessage());
}
}) {
@Override
public Priority getPriority() {
return priorityHigh;
}
};
mVolleyCustomReq.setRetryPolicy(drp);
VolleyController.getInstance().addToRequestQueue(mVolleyCustomReq,
tag_req_default);
/*return response; ?!?!?*/
}
}
但是如何return回应?!因为如果服务器繁忙或宕机或响应有点晚,开发人员在他们的应用程序中会得到 null!(我猜)。
如何制作这样的东西?!构建一个具有 class 的 jar 库,该库具有提供参数并在特定 URL 上发送它的方法,使用 volley 库?
像
一样定义接口
public interface OntaskCompleted {
public void onSuccess(JSONObject response);
public void onError(String message);
}
现在你的 activity 应该实现这个接口,你必须重写这些方法。
现在在你 Volley class 做这个。
if (response != null) {
ontaskCompleted.onSuccess(JSONObject);
}
和
public void onErrorResponse(VolleyError error) {
VolleyLog.d(tag_req_default, error.getMessage());
ontaskCompleted.onError( error.getMessage());
}
现在您的 activity 将得到错误或成功的结果。
希望对你有帮助。
我想创建一个库来减少我在每个 android 项目上的重复网络工作,甚至将我的 jar 提供给其他开发人员使用我的方法进行网络通信。
所以我构建了这个:
import java.util.Map;
import org.json.JSONObject;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request.Method;
import com.android.volley.Request.Priority;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
public class RequestResp {
private final static String WEB_SERVICE_URL = "http://blabla/api";
private final Priority priorityImmediatelly = Priority.IMMEDIATE;
private final Priority priorityHigh = Priority.HIGH;
private final Priority priorityNORMAL = Priority.NORMAL;
private String tag_req_default = "tag_req_default";
VolleyCustomRequest mVolleyCustomReq;
DefaultRetryPolicy drp = new DefaultRetryPolicy(15000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
public /*JSONObject*/ void sendParamsAsHighPriority(Map<String, String> params) {
mVolleyCustomReq = new VolleyCustomRequest(Method.POST,
WEB_SERVICE_URL, params, new Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if (response != null) {
}
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(tag_req_default, error.getMessage());
}
}) {
@Override
public Priority getPriority() {
return priorityHigh;
}
};
mVolleyCustomReq.setRetryPolicy(drp);
VolleyController.getInstance().addToRequestQueue(mVolleyCustomReq,
tag_req_default);
/*return response; ?!?!?*/
}
}
但是如何return回应?!因为如果服务器繁忙或宕机或响应有点晚,开发人员在他们的应用程序中会得到 null!(我猜)。
如何制作这样的东西?!构建一个具有 class 的 jar 库,该库具有提供参数并在特定 URL 上发送它的方法,使用 volley 库?
像
一样定义接口public interface OntaskCompleted {
public void onSuccess(JSONObject response);
public void onError(String message);
}
现在你的 activity 应该实现这个接口,你必须重写这些方法。
现在在你 Volley class 做这个。
if (response != null) {
ontaskCompleted.onSuccess(JSONObject);
}
和
public void onErrorResponse(VolleyError error) {
VolleyLog.d(tag_req_default, error.getMessage());
ontaskCompleted.onError( error.getMessage());
}
现在您的 activity 将得到错误或成功的结果。 希望对你有帮助。