我有一些数据存储在数据库里。在这种情况下,是应用程序的用户。
我想检索它们的所有信息并放在应用程序的布局上,因此我需要在layout类的onCreate函数处检索数据,以便在您更改到该布局时显示在该布局上。
我知道AsyncTaskVolley对我的api执行异步请求,但这使得大多数情况下不会在布局上显示所有用户,因为在呈现布局时尚未检索到他们。
我也搜索过,似乎有一些方法(有时看起来是解决方法)可以使AsyncTaskVolley同步,但它们会阻塞uithread。
我知道asynchronoussynchronous请求的区别,以及为什么第二个请求会阻塞应用程序,所以我有一些问题。
是否始终建议使用异步请求?
如果同步请求不正确,在需要在呈现布局的同时显示从数据库检索到的数据的情况下,将使用什么?
如果我想让这些数据在布局的整个类中都可用,我该如何处理它?我需要在渲染布局时在屏幕上显示数据,但我也希望用它制作一些东西,因此如果我试图在任何地方使用它,而不是截击请求的onResponse方法,我总是得到null。作为数据“预加载”的东西。
提前谢谢!

最佳答案

最后,我注意到我的问题是关于概念,因为我认为您将无法使用从onResponse请求的Volley方法中检索的数据。
最后,我所做的是在片段上创建一个全局变量,并在完全检索到该变量时将数据分配给它。假设我有一个要检索的字符串。
然后创建全局变量(在片段顶部):

String string = "";

我创建了一个函数,将参数赋给这个全局变量:
public void setString(String string){
    this.string = string;
}

最后,在检索到在onResponse方法上调用该函数的字符串之后:
StringRequest jsonArrayRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        try {
           //Do stuff to retrieve the String
           setString(response); //Assign the string "response" to the global variable via the method.
        } catch (JSONException e) {
              e.printStackTrace();
        }
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
         Log.e("LOG", error.toString());
    }
});

如果你需要对这些数据做一些处理,你应该等到数据被完全检索出来,这样你可以同时显示一个对话框。
我不知道是否有更好的方法来做这件事,或者这是一个坏的做法,但这是最简单的方法,我可以自己找到。

09-05 18:43
查看更多