【问题标题】:How to persist variable value from inner class (Response.Listener) to the outside?如何将变量值从内部类(Response.Listener)持久化到外部?
【发布时间】:2015-12-15 12:14:20
【问题描述】:

我在容器类中有一个名为facebookCheckEmail()(下)的函数,我想更改public void onResponse(FbCheckObject fbCheckObject) {}facebookCheckEmail() 中容器类的变量值(fbresponse),我该怎么做?

private void facebookCheckEmail( String email ) {



    fbCheckEmail_params = new HashMap<String, String>();
    fbCheckEmail_params.put("Email", email);

    final GsonRequest<FbCheckObject> gsonRequest = ApiRequest.gsonFacebookCheckEmailRequest
            (
                    new Response.Listener<FbCheckObject>() {
                        @Override
                        public void onResponse(FbCheckObject fbCheckObject) {


                            try {

                                System.out.println("Status = " + fbCheckObject.getStatus());

                                if (new String(fbCheckObject.getStatus()).equals("ok") == true) {

                                    fbresponse = "ok";

                                } else if(new String(fbCheckObject.getStatus()).equals("no") == true){

                                    fbresponse = "no";

                                }

                            } catch (Exception e) {

                                Log.d("Web Service Error", e.getMessage());
                                e.printStackTrace();
                            }
                        }
                    }
                    ,
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            // Deal with the error here

                        }
                    },
                    fbCheckEmail_params
            );

    AppController.getInstance().addToRequestQueue(gsonRequest, TAG);

}

我的容器类是:

public class MainLoginActivity extends Activity {

  public String fbresponse = "";

      @Override
    protected void onCreate(Bundle savedInstanceState) {
     .......
    }

    ..........

    private void facebookCheckEmail( String email ) {
    ......
    }



}

注意:在“@Override public void onResponse(FbCheckObject fbCheckObject) {}”内,如果不成功,fbresponse 值将成功分配给“ok”或“no”,但如果我在System.out.printInfbresponse 之外的任何地方,我将得到“null

【问题讨论】:

  • 据我所知,您确实更改了变量。或者它没有编译?什么没有按预期工作
  • 当我 System.out.println() fbresponse 在新的 Response.Listener() {} 范围之外它返回“null”
  • 代码示例中缺少某些内容。您正在为变量分配一个空白,然后将其更改为“ok”或“no”。我没有看到 NULL 应该在哪里分配给变量。
  • 从 fbresponse = ""; 更改后为空回应;

标签: java android android-volley inner-classes gson


【解决方案1】:

做你想做的并不是一个好的设计。你应该改变你的方法,让它返回状态:

private String facebookCheckEmail( String email ) {
...
}

并将返回值设置为响应:

fbresponse = facebookCheckEmail(email);

【讨论】:

  • 你能给我看一个上面代码的例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
相关资源
最近更新 更多