Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从改装onResponse()更新活动/片段UI?_Java_Android_Rest_Retrofit2 - Fatal编程技术网

Java 如何从改装onResponse()更新活动/片段UI?

Java 如何从改装onResponse()更新活动/片段UI?,java,android,rest,retrofit2,Java,Android,Rest,Retrofit2,我想在下一个Android项目中使用改型2.1.0。我希望使用设计模式,因此为每个REST调用创建单独的类,即 IBalanceService.java public Interface IBalanceService{ @GET("users/{username}") void getUser(@Path("username") String username, Callback<User> cb); } 如何从onResponse()更新活动/片段中的UI 其他信息

我想在下一个Android项目中使用改型2.1.0。我希望使用设计模式,因此为每个REST调用创建单独的类,即

IBalanceService.java

public Interface IBalanceService{
  @GET("users/{username}")
  void getUser(@Path("username") String username, Callback<User> cb);
}  
如何从onResponse()更新活动/片段中的UI

其他信息:
min SDK:19
目标SDK:23
使用OkHttp和gson改进2.1.0

公共类平衡器客户端{
私有静态均衡器客户端实例;
私人服务请求;
私有客户端(){
改装改装=新改装.Builder()
.baseUrl(“http://hovermind.com")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RXAAdapter)
.build();
请求=改装.create(IBalanceService.class);
}
公共静态同步平衡器客户端getInstance(){
if(实例==null)
实例=新的BalanceRestClient();
返回实例;
}
public void getRequest(字符串用户名、自定义回调){
Call Call=apiService.getUser(用户名);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
User=response.body();
onResponse(用户);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
//由于请求失败,此处记录错误
}
});
}
}
  • 创建一个单例类。它只初始化一次请求
  • 创建一个自定义回调,它将把您的响应返回到UI
  • 在要使用BalanceRestClient.getInstance.getRequest(参数..)的位置调用它

  • 在上创建如下界面:

    public interface BalanceListener {
    
        void onUserAvailable(User user);
    
    }
    
    在您的平衡器客户端中有一个实例。在onResponse中:

      @Override
      public void onResponse(Call<User> call, Response<User> response) {
    
          User user = response.body();  
    
          listener.onUserAvailable(user);
    
      }
    
     public class BalanceActivity extends Activity implements BalanceListener {
                    ......
    
            @Override
            public void onUserAvailable(User user) {
                // update user views here
            }
        }
    

    有一个答案,但只有一个,它并没有解决我的问题。检查我也在考虑类似的方法。关于设计模式,您能否给出一些关于哪种设计模式在性能方面最好的提示。上一个项目我使用了我自己的库+工厂设计模式。@HassanMakarov我相信没有最佳设计模式可以获得最佳性能。您可以使用MVP/MVC模式,但仍然可以编写草率而缓慢的代码。另一方面,您可以不使用任何模式,并且具有出色的性能。性能取决于100000件事情。但是,如果您想保持代码干净、结构良好、易于扩展并且相对容易地发现bug,那么就使用上面提到的一些模式。我更喜欢MVP。您可以将它们与Singleton/Factory/Builder/etc.模式结合起来(这取决于您当前的需要)。很好。但我对单身汉感到困惑。如果我在不同的活动中多次使用BalanceRestClient会怎么样。创建多个BalanceRestClient实例而不是singleton实例有什么问题?这不划算。如果已经创建了,为什么还要一次又一次地创建呢?我还看到了许多例子,其中翻新(RestAdapter)是单例的,为什么?我问了一个关于singleton restrofit(RestaAdapter)的问题,即为什么改装是singleton,改装singleton的好处是什么,如果我在一个活动中创建多个改装实例会怎么样。但不幸的是,我的问题被标记为不清楚并被删除。在那之后,我有好几个小时不能问这个问题了days@RoberBanyai我想使用设计模式。有一个热门话题:单例“反模式”,因为如果你以前做过,那么做一个新的istance是毫无意义的。使用singleton,您将把实例保存在内存中,并且可以随时访问它。
    public interface BalanceListener {
    
        void onUserAvailable(User user);
    
    }
    
      @Override
      public void onResponse(Call<User> call, Response<User> response) {
    
          User user = response.body();  
    
          listener.onUserAvailable(user);
    
      }
    
     public class BalanceActivity extends Activity implements BalanceListener {
                    ......
    
            @Override
            public void onUserAvailable(User user) {
                // update user views here
            }
        }