我正在尝试使用 Volley 作为 DBA 层来调用具有 JSON 对象的网络服务。因为这一层在activity和另一个服务层之下,所以它似乎不能正常工作。我将尝试解释我的设置:
主要 Activity :
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ProductService productService = new ProductService();
productService.getProduct();
}
产品服务.java:
public void getProduct() {
JsonObjectRequest req = new JsonObjectRequest("http://echo.jsontest.com/name/Milk/price/1.23/", null, createMyReqSuccessListener(), createMyReqErrorListener());
ApplicationController.getInstance().addToRequestQueue(req);
}
private Response.Listener<JSONObject> createMyReqSuccessListener() {
return new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.v("response", response.toString());
}
};
}
private Response.ErrorListener createMyReqErrorListener() {
return new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
return;
}
};
}
我希望这已经足够清楚了。 最后,我想在一个变量中使用来自 Activity 的 ProductService::getProduct() 和来自 web 服务的实际 JSON 响应,我以后可以使用它。
然而,此刻,这条线
Log.v("response", response.toString());
甚至不执行。我做错了什么?
最佳答案
我会尝试的是:
将 getProduct 声明为
public void getProduct(Response.Listener<JSONObject> listener,
Response.ErrorListener errlsn) {
JsonObjectRequest req = new JsonObjectRequest("http://echo.jsontest.com/name/Milk/price/1.23/",null, listener, errlsn);
ApplicationController.getInstance().addToRequestQueue(req);
}
然后像这样调用您的 Activity :
productService.getProduct(
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
variableFromActivity = response;
//Or call a function from the activity, or whatever...
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//Show error or whatever...
}
});
关于java - 在另一个类中获取 Android Volley 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21321586/