这是我的代码:
public class ServerCall {
Context context;
public int cartCount;
public ServerCall(Context context){
this.context=context;
}
public Integer addCartItem(RequestObject requestObject) {
new AddToCartList().execute(requestObject);
Log.d("count",String.valueOf(cartCount));
return cartCount;
}
public class AddToCartList extends AsyncTask<RequestObject, Void, JSONObject> {
@Override
protected JSONObject doInBackground(RequestObject... arg0) {
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(arg0[0], ServiceHandler.POST);
// List<Products> result = new ArrayList<Products>();
Log.d("Response: ", "> " + jsonStr);
JSONObject product = new JSONObject();
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
product = jsonObj.getJSONObject("rsBody");
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return product;
}
@Override
protected void onPostExecute(JSONObject result) {
super.onPostExecute(result);
try {
if (result != null) {
String status = result.getString("status");
int totalCartItem = result.getInt("totalCartItem");
/* cartHelper = new CartHelper();
cartHelper.setStatus(status);
cartHelper.setTotalCartItem(totalCartItem);*/
cartCount=totalCartItem;
Log.d("status",status);
Log.d("totalCartItem",String.valueOf(cartCount));
Toast.makeText(context, status, Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
return;
}
}
}
我们没有获得我在cartCount
类中设置的全局变量AddToCartList
的值,并尝试从addCartItem()
函数中获取其值AddToCartList
叫,但我们得到空值。
答案 0 :(得分:1)
问题是,ServerCall和AddToCartList不是同一个类,所以你必须首先在addtocartlit中获得对servercall的引用,然后使用你对servercall实例的引用引用cartCount,比如call.cartCount,而不是cartcount,除非它是一个看起来不像的内部阶级。
其次,你必须在addCartItem()中保存对addtocartlist asynctask的引用,然后在启动它之后调用它的.get()方法,这将确保它在你尝试记录新值之前完成。
答案 1 :(得分:1)
我认为你的解决方案中的主要问题是你正在尝试从Inner类编辑B
变量,这只有在cartCount是静态时才有用,我建议你等待你的任务要像某些人已经提到的那样,使用get方法recursive