在java类中获取全局变量的空值?

时间:2015-12-30 13:13:12

标签: java

这是我的代码:

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叫,但我们得到空值。

2 个答案:

答案 0 :(得分:1)

问题是,ServerCall和AddToCartList不是同一个类,所以你必须首先在addtocartlit中获得对servercall的引用,然后使用你对servercall实例的引用引用cartCount,比如call.cartCount,而不是cartcount,除非它是一个看起来不像的内部阶级。

其次,你必须在addCartItem()中保存对addtocartlist asynctask的引用,然后在启动它之后调用它的.get()方法,这将确保它在你尝试记录新值之前完成。

答案 1 :(得分:1)

我认为你的解决方案中的主要问题是你正在尝试从Inner类编辑B变量,这只有在cartCount是静态时才有用,我建议你等待你的任务要像某些人已经提到的那样,使用get方法recursive

完成