当前位置: 首页 > 知识库问答 >
问题:

在我尝试显示结果之后,将启动改版API调用

岳谦
2023-03-14

我使用的是MVVM体系结构,我有我的模型类“Category”和我的ViewModel类以及Recyclerview的MainActivity和适配器,如果我在活动中设置适配器(在改型调用的onResponse方法中),所有的工作都很好,但是如果我这样做,不尊重MVVM体系结构的分离,下面是用于执行调用的方法:

 public List<Category> getcategories() {

    RestInterface restInterface = rest.getInterfaceService();
    Call<List<Category>> productService = restInterface.getCategories();
    productService.enqueue(new Callback<List<Category>>() {
        @Override
        public void onResponse(Call<List<Category>> call, Response<List<Category>> response) {
            if (response.body() == null){
                Log.e(TAG, "responce Call response is null ");
            }else{
                Log.e(TAG, "repo : "+response.body().toString());
                categories = (ArrayList<Category>) response.body();

            }
        }

        @Override
        public void onFailure(Call<List<Category>> call, Throwable t) {
            Log.e(TAG, "Call Fail  : " + t.getMessage());
        }
    });
    Log.e(TAG, "repo 2: "+categories.toString());
    return categories;
}

以下是logcat结果:

07-11 20:18:34.325 243 69-24369/com.instadom E/DatarePository:repo 2:[]

07-11 20:18:35.399 243 69-24369/com.instadom E/DataRepository:repo:[example.com.models.category@1DF175E,example.com.models.category@5CFC73F,example.com.models.category@1E7380C,example.com.models.category@7CEB555,example.com.models.category@3014B6A,example.com.models.category@A83985B,example.com.models.category@3D5C8F8,

我不能理解的是,为什么在“log.e(TAG,”repo 2:“+categories.toString());”中没有得到任何结果即使是“categories”也是一个类对象

我会得到任何帮助的,事先谢谢你,

代码如下:

        @Override
        public void onFailure(Call<List<Category>> call, Throwable t) {
            Log.e(TAG, "Call Fail  : " + t.getMessage());
            callback.onFailure(t.getMessage());
        }
    });
    Log.e(TAG, "result : "+categories.toString());
    return categories;
}
public interface Callback<T> {
    void onSuccess(ArrayList<Category> data);
    void onFailure(String reason);
}

共有1个答案

皮嘉德
2023-03-14

这是因为ProductService.Enqueue是一个异步调用,语句log.e(标记,“repo 2:”+categories.ToString());将在查询调用之后立即执行,而onresponsonfailure将在网络调用之后执行。向getCategories()传递回调以获取类别列表,如下所示

public interface Callback<List<Categories>> callback{
   void onSuccess(List<Categories> data);
   void onFailure(String reason);
}

或者可以使用通用回调接口在所有网络请求中使用,如下所示

public interface Callback<T> callback{
   void onSuccess(List<T> data);
   void onFailure(String reason);
}

然后实现回调功能

public List<Category> getcategories(Callback<List<Category>> callback) {

    RestInterface restInterface = rest.getInterfaceService();
    Call<List<Category>> productService = restInterface.getCategories();
    productService.enqueue(new Callback<List<Category>>() {
        @Override
        public void onResponse(Call<List<Category>> call, Response<List<Category>> response) {
            if (response.body() == null){
                Log.e(TAG, "responce Call response is null ");
            }else{
                Log.e(TAG, "repo : "+response.body().toString());
                categories = (ArrayList<Category>) response.body();
                callback.onSuccess(categories);

            }
        }

        @Override
        public void onFailure(Call<List<Category>> call, Throwable t) {
            Log.e(TAG, "Call Fail  : " + t.getMessage());
            callback.onError(t.getMessage());
        }
    });
}
 类似资料:
  • 问题内容: 我有一个简单的jquery代码,用ajax在jQuery模态窗口中发送内容!一切正常,没有任何问题。通常,单击发送按钮后,此代码会在1-2秒后显示结果, 我的问题是,如何在单击“发送”之后显示结果之前添加并显示加载图片? 问题答案: 您可以通过 和 要么

  • 我正在尝试在Xcode9测试版中打开我现有的项目。代码编译没有任何错误,但当模拟器显示警告在警报时,应用程序启动。 请让我知道哪里出了问题。 无法更改文件的所有者:///users/stiga/library/developer/coresimulator/developer/2a6099d8-6743-4551-AE73-CE7AFCAEE9fe/data/library/caches/com.

  • 我知道这是Android Studio的一个老问题,但请相信我,我尝试了在Stack Overflow旧线程上发现的所有问题(2016年和2017年的解决方案,很明显在2021不再有效)。 我安装了Android Studio,当我启动它时,它不会运行。我尝试将JAVA\u HOME、JDK\u HOME、STUDIO\u JDK设置为Android STUDIO附带的JRE文件夹和C:\Prog

  • 问题内容: 当设备在android上启动时,我一直在尝试启动服务,但无法正常工作。我已经看了许多在线链接,但是这些代码都不起作用。我忘记了什么吗? 广播接收器 问题答案: 作为附加信息:BOOT_COMPLETE在挂载外部存储之前发送到应用程序。因此,如果将应用程序安装到外部存储,它将不会收到BOOT_COMPLETE广播消息。

  • 在Tomcat中多次运行应用程序后,我已经耗尽了PermGen内存(我怀疑是quartz servlet的问题),Java抛出了一个OutofMemoryError。通常,我只是不时地重启tomcat,但自从发生这种情况后,我无法启动/重启。Tomcat在我们的qa环境中运行,通常通过sbin文件夹启动/停止/重新启动。我尝试使用替代方案catalina.sh run启动tomcat,但它表示端口

  • 我是机器人和爪哇的新手。我已经构建了一个计算器,当我输入3个输入时,我需要它来自动显示结果,但我不知道该怎么做。 我将multiply添加到了一个文本视图(通过属性onclick),它可以工作,但我希望它能在textview中自动显示。