android - 非 Activity 类中的改造调用

标签 android retrofit2

我是 android 的初学者,正在使用 Retrofit 2.0 进行 http 调用。因为,我在不同的 Activity 中使用相同的调用,所以我在非 Activity 类中创建了函数。

这里我的改造调用了非 Activity 类代码,

public class ServerRequests {


private static ServerRequests serverRequests = new ServerRequests();

public static ServerRequests getInstance(){

    return serverRequests;
    }

public LoginResponse ClientLogin(final LoginRequest request, Context context){

    final ProgressDialog dialog = DialogueUtils.getInstance().showProgressDialog(context);
    dialog.setMessage("Loading...");
    dialog.show();

    RestApi mApi = RetrofitProvider.getInstance().getRestApi();

    Call<UserToken> call = mApi.clientLogin(request);

    // Stores Login response
    final LoginResponse loginResponse = new LoginResponse();

    call.enqueue(new Callback<UserToken>() {
        @Override
        public void onResponse(Call<UserToken> call, Response<UserToken> response) {
            dialog.dismiss();
            if (response.isSuccessful()){
                loginResponse.setMloginstatus(true);
                loginResponse.setStatusCode(response.code());
                loginResponse.setUserToken(response.body());

                return;
            }

            // response isn't successful
            loginResponse.setMloginstatus(false);
            loginResponse.setStatusCode(response.code());
            loginResponse.setMessage(response.message());
            loginResponse.setUserToken(null);
        }

        @Override
        public void onFailure(Call<UserToken> call, Throwable t) {

            dialog.dismiss();
            loginResponse.setMloginstatus(false);
            loginResponse.setUserToken(null);
            loginResponse.setMessage(t.getMessage());
            loginResponse.setStatusCode(FAILURE_ERROR);
        }
    });

    return loginResponse;
}
}

我将在 Activity 类中调用上述函数, 这是代码,

LoginRequest request = new LoginRequest();
request.setPassword(PASSWORD);
request.setEmail(USER_NAME); 

// Calling Login function

LoginResponse response = ServerRequests.getInstance().ClientLogin(request, this);

在这里,在 Activity 类中收到响应之前,正在执行下一组代码行。因此,Activity 类不会等到函数返回到调用序列。

任何人都可以建议我执行此操作的更好方法是什么。

谢谢

最佳答案

我认为你可以使用一个接口(interface)来处理回调。

第一步:定义接口(interface)

public interface LoginListener{
 public void success(Response<UserToken> response);
 public void failed(String message);
}

Step2:在你使用retrofit的方法上使用这个接口(interface)。

public LoginResponse ClientLogin(final LoginRequest request, Context context, LoginListener listener){

    final ProgressDialog dialog = DialogueUtils.getInstance().showProgressDialog(context);
    dialog.setMessage("Loading...");
    dialog.show();

    RestApi mApi = RetrofitProvider.getInstance().getRestApi();

    Call<UserToken> call = mApi.clientLogin(request);

    // Stores Login response
    final LoginResponse loginResponse = new LoginResponse();

    call.enqueue(new Callback<UserToken>() {
        @Override
        public void onResponse(Call<UserToken> call, Response<UserToken> response) {
            dialog.dismiss();

            listener.success(response);
        }

        @Override
        public void onFailure(Call<UserToken> call, Throwable t) {

            dialog.dismiss();
            listener.failed("message error");
        }
    });

    return loginResponse;
}

希望这种方式能帮到你。

关于android - 非 Activity 类中的改造调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39989964/

相关文章:

android - 如何在 flutter app android 中添加 Startapp 广告?

android - 使用 Retrofit 将 JsonArray 转换为 Kotlin 数据类(预期为 BEGIN_OBJECT 但为 BEGIN_ARRAY)

android - 使用 RxJava2 和普通空响应错误进行改造 2

android - 如何在 Android 中接收 Audiorecord 的硬件时间戳?

java - 无法从 fragment 启动 Activity ,出现 IllegalArgumentException

android - 使用渐变阴影查看

java - 使用 Retrofit 从最内部类获取数据。帮我显示A类和B类的数据

android - Retrofit 2.0中如何使用Authorization Token token=A-123456789qwertyuio12 Header

android - 如何从 Retrofit v2 的 onResponse 返回值

android - 模拟器无法正常启动 "ERROR: detected a hanging thread"