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

使用来自非活动类的retfit生成http请求

锺离德庸
2023-03-14

由于需求的变化,我们不得不单独从服务器上使用REST服务。我见过它的改型。但我不确定如何在DAO类中使用它而不是SQL查询。

我们已经研究了公共汽车的概念,这需要更多的返工。我们希望对代码进行最小的更改来合并此更改。

如果还有什么需要,请告诉我。

    techList=new ArrayList<Technology>();
    techList=technologyBL.getAllTechnology(appId);
    adapterTech=new TechnologyAdapter(this,new ArrayList<Technology>  (techList));
    listView.setAdapter(adapterTech);

技术BL:

    public List<Technology> getAllTechnology(String appId) {
        techList=technologyDao.getAllTechnology(appId);
        // some logic 
        return techList;
    }

技术刀:

    public List<Technology> getAllTechnology(String appId) {
        //sql queries
        return techList;
    }

技术模型:

   class Technology{
        String id,techName,techDescription;
       //getters & setters
   }
    public interface IRestClient {

      @GET("/apps/{id}/technologies")
      void getTechnoloies(@Path("id") String id,Callback<List<Technology>> cb);

      //Remaining methods
    }
    public class RestClient {

          private static IRestClient REST_CLIENT;
          public static final String BASE_URL = "http://16.180.48.236:22197/api";
          Context context;

          static {
             setupRestClient();
          }

          private RestClient() {}

          public static RestClient get() {
             return REST_CLIENT;
          }

          private static void setupRestClient() {
               RestAdapter restAdapter = new RestAdapter.Builder()
                  .setEndpoint(BASE_URL)
                  .setClient(getClient())
                  .setRequestInterceptor(new RequestInterceptor() {
                  //cache related things
               })
               .setLogLevel(RestAdapter.LogLevel.FULL)
               .build();

               REST_CLIENT = restAdapter.create(IAluWikiClient.class);
           }

           private static OkClient getClient(){
                 //cache related
           }
    }
    techList=RestClient.get().getTecchnologies(id);

DAO中的异步调用

    RestClient.get().getTechnolgies(id,new CallBack<List<Technolgy>(){
       @Override
       public void success(List<Technology> technologies, Response response)   {
            techList=technologies;
       }

       @Override
       public void failure(Retrofit error){}
   });

共有1个答案

宣意致
2023-03-14

你有两个选择。

第一个是在活动中创建referfit回调:

RestClient.get().getTechnolgies(id,new CallBack<List<Technolgy>(){
   @Override
   public void success(List<Technology> technologies, Response response) {
        ArrayList<Technology> techList = technologyBL.someLogic(technologies);
        adapterTech=new TechnologyAdapter(this,techList);
        listView.setAdapter(adapterTech);
   }

   @Override
   public void failure(Retrofit error){}
});

注意,您必须将//某些逻辑部分提取到单独的BL方法中。

RestClient.get().getTechnolgies(id)
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Action1<List<Technology>>() {
         @Override
            public void call(List<Technology> technologies) {
                ArrayList<Technology> techList = technologyBL.someLogic(technologies);
                adapterTech=new TechnologyAdapter(this,techList);
                listView.setAdapter(adapterTech);
            }
     });
public interface IRestClient {

  @GET("/apps/{id}/technologies")
  Observable<List<Technology>> getTechnologies(@Path("id") String id);

  //Remaining methods
}
 类似资料:
  • 但我收到一条错误消息:

  • 其实针对大多应用场景,DNS 是不会频繁变更的,使用 Nginx 默认的 resolver 配置方式就能解决。 对于部分应用场景,可能需要支持的系统众多:win、centos、ubuntu 等,不同的操作系统获取 DNS 的方法都不太一样。再加上我们使用 Docker,导致我们在容器内部获取 DNS 变得更加难以准确。 如何能够让 Nginx 使用随时可以变化的 DNS 源,成为我们急待解决的问题

  • 我需要使50 http获取请求尽快与Android的改型。我正在使用OKHTTP的改型。目前,与普通Java和相比,Retrofit的工作做得很差:对于所有50个请求,如果我为设置池大小20,则为Retrofit设置50sec,为普通设置30sec,而为Retrofit/OkHttp设置。 如果查看logcat,我可以看到无论在中设置了什么,registfit最多执行5个并发请求,而在中,并发请求

  • 我根据这两个指南创建了一个基于Quarkus 2.1.2的新Kafka Stream项目: https://quarkus.io/guides/kafka-streams https://quarkus.io/guides/kafka-schema-registry-avro 我将一些Avro模式放在文件夹中,并使用Maven构建了项目。构建成功,但在目录中没有任何Java类。 正如新版Quark

  • 我有Spring Boot应用程序,我使用JPA层与PostgreSQL交谈。我有一个类型UUID的非主键,我想在调用保存方法时自动生成。我用@GeneratedValue注释了属性,但插入时列值为空。 我还创建了列: 在这种情况下如何自动生成非主要UUID值?

  • Imgur API对发出get请求所需的授权进行了如下说明: 对于公共只读和匿名资源,如获取图像信息、查找用户注释等,所需做的就是在请求中发送一个带有的授权标头。如果您希望匿名上传图像(图像 不与帐户绑定),或者希望创建匿名 相册,也可以使用此方法。这让我们知道哪个应用程序正在访问API。 我已经看了下面的问题,并尝试了那里建议的东西,但都没有帮助。 带凭据的JSON NSURLRequest 带