我是否需要每次在Retrofit 2中创建新接口

时间:2017-08-17 11:20:29

标签: android retrofit2

我想问一下,我是否需要为每个Interfaces POST我提出的具有不同网址的请求创建新的GET。 对于前者 我创建了1个用于注册的界面,另一个用于登录其他用于获取朋友。我不能只做一般的帖子并获得方法,我可以发送URL,params发送和记录响应?

1 个答案:

答案 0 :(得分:0)

不,您不需要为每个请求创建新接口或新客户端!

在界面内,您可以根据需要和要求创建多种方法。

对于LoginRegistration方法名称将有所不同,您的参数将不相同。所以你可以根据需要创建方法。

//When Base Url like "http://exmaple.com/"

@GET("Service/registration")
Call<RegResult> getRegistered(@Query("name") String name,
   @Query("email") String email,
   @Query("dob") String dob,
   @Query("name") String name   

);

@GET("Service/login")
Call<LoginResult> getLogin(@Query("username") String username,
   @Query("pass") String pass  

);
@GET("Service/profile")
Call<ProfileResult> getProfile(@Query("userid") String userid

);

您也可以使用同一个客户端,因为您的基本网址是相同的。

如果基本网址不同,您也可以像这样使用相同的客户端..

public class ApiClient {

 private static Retrofit retrofit = null;

 public static Retrofit getClient(String base_url) {
    if (retrofit==null) {
        retrofit = new Retrofit.Builder()
                .baseUrl(base_url)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
 }
}

现在您可以设置不同的基本网址。

创建界面对象......

String BASE_URL = "http://exmaple.com/";
ApiInterface apiService = ApiClient.getClient(BASE_URL).create(ApiInterface.class);

通话方式..

 String user_id = "1";
 Call< ProfileResult > call = apiService.getProfile(user_id);

获得结果

call.enqueue(new Callback< ProfileResult >() {
        @Override
        public void onResponse(Call< ProfileResult >call, Response< ProfileResult > response) {
            Profile profile = response.body().getResults();
        }

        @Override
        public void onFailure(Call< ProfileResult >call, Throwable t) {
            // Log error here since request failed
            Log.e(TAG, t.toString());
        }
 });

跳过你得到你的答案....为了进一步查询填写免费询问...