当前位置: 首页 > 面试题库 >

如何在Android中的onResponse之外使用变量?

夏侯元忠
2023-03-14
问题内容

我创建了一个活动,在其中将一些记录插入到mysql数据库中。我声明了一个名为的全局变量lastInsertId。当我尝试方法println内部的变量时onResponse,工作正常,但是当我尝试println方法外部时,返回null。我还需要在方法之外使用此变量。该怎么办?这是我的代码:

String insertUrl = "http://localhost/file.php";
String lastInsertId;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

    StringRequest request = new StringRequest(Request.Method.POST, insertUrl, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            lastInsertId = response.toString();
            System.out.println(lastInsertId); // returns the lastInsertId
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    }) {

        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> parameters = new HashMap<String, String>();

            // parameters

            return parameters;
        }
    };
    requestQueue.add(request);
    System.out.println(lastInsertId); // get's null
}

谢谢!


问题答案:

我知道了。大约一年后,我回答了这个问题,因为我看到这个帖子有几百位访客。希望我的回答将帮助其他功能访问者从onResponse方法获取数据。这是代码:

String insertUrl = "http://localhost/file.php";
String lastInsertId;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

    StringRequest request = new StringRequest(Request.Method.POST, insertUrl, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            lastInsertId = response.toString();
            System.out.println(lastInsertId); // returns the lastInsertId
            callback.onSuccess(lastInsertId);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    }) {

        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> parameters = new HashMap<String, String>();

            // parameters

            return parameters;
        }
    };
    requestQueue.add(request);
}

public interface VolleyCallback{
    void onSuccess(ArrayList<Data> dataArrayList);
}

这是我们在Activity中需要的代码。

public void onResume(){
    super.onResume();
    getString(new VolleyCallback(){
        @Override
        public void onSuccess(String result){
            System.out.println(result); // returns the value of lastInsertId
        }
    });
}


 类似资料:
  • 伙计们,我正在使用api请求来获取一个列表,这是我的代码: 我在这里的问题是,当我试图使用这个列表(跟随列表)之外的display跟进,onSolutions方法我发现它是空的,所以我试图使onSolutions retrun列表,而不是空的,但它不起作用,我得到了这个消息(on响应(呼叫 我不知道该怎么做感谢你的帮助

  • 问题内容: 目前,我正在从Firebase检索数据,将数据放入,然后放入完成块。完成块内部的项目存储为变量。变量仅在完成块内部工作,我想在完成外部使用它 问题答案: 参数的全部目的是提供一种机制,用于在异步调用时得到通知。因此,将代码取决于闭包 内部 该异步方法的完成情况。 而且,如果在调用异步关闭之前UI的一部分没有意义,则需要配置UI使其显式(也许显示a 或其他内容),然后在完成处理程序中删除

  • 我不完全确定这在Java中是否可行,但在if语句中声明的字符串之外,如何使用if语句中声明的字符串呢?

  • 问题内容: 我在尝试将url中的额外变量传递给我的WordPress安装时遇到了麻烦。 例如 出于某种原因,它仅在网站根目录上有效,但是如果url中包含更多信息,则它将无效。我的主题目录中的functions.php文件中包含以下代码。 有任何想法吗? 问题答案: 要在“前端”上进行“ The WordPress Way”(在的上下文中不起作用wp-admin),您需要使用3个WordPress函

  • 问题内容: 在回调函数之外使用全局变量的最佳方法是什么? 问题答案: 您提供的代码是完全有效的,并且实际上 可以 “保持”其价值。问题可能是异步运行的-仅 在 从服务器完全加载后才调用匿名函数。因此,现实世界中的执行顺序如下所示: 调用 (开始加载data.xml) 通话(目前仍为null) (data.xml中完成载入) 现在 匿名函数被调用时,其分配值给图标:。 如果你想要做一些事情的价值,

  • 问题内容: 我正在开发Spotify应用。我可以登录并获取我的令牌。我的问题是我无法在方法外访问变量。在这种情况下 这是我的方法: 如您所见,我在console.log中记录了名称,并在控制台中获得了正确的值。但是仅在我调用即使返回names变量的情况下得到的函数的情况下,它也可以在这里使用。 我需要那个变量。 问题答案: 没有返回任何东西。你需要从返回的承诺,然后当你回到内 即 它是由外部函数返