tit*_*619 2 android retrofit retrofit2
我正在做一个基本的 Android 应用程序,它通过 API 执行简单的登录。我需要返回接收到的数据,但改造后的 onResponse 方法具有 void 返回类型。我的代码是:
package com.example.deberesloginjava.data;
import android.util.Log;
import com.example.deberesloginjava.data.APIServices.Post;
import com.example.deberesloginjava.data.model.LoggedInUser;
import java.io.IOException;
import com.example.deberesloginjava.data.APIServices.APIService;
import com.example.deberesloginjava.data.APIServices.ApiUtils;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import static android.content.ContentValues.TAG;
/**
 * Class that handles authentication w/ login credentials and retrieves user information.
 */
public class LoginDataSource {
    private APIService mAPIService;
    public void getData(Callback<Result<LoggedInUser>> callback){
        apiClient.getData().enqueue(callback);
    }
    public Result<LoggedInUser> login(String username, String password) {
        try {
            mAPIService = ApiUtils.getAPIService();
           mAPIService.login(username, password, "password").enqueue(new Callback<Post>() {
                @Override
                public void onResponse(Call<Post> call, Response<Post> response) {
                    if(response.isSuccessful()) {
                        LoggedInUser loggedInUser;
                        loggedInUser = new LoggedInUser(response.body().getUserName(),response.body().getUserName(), response.body().getAccess_token());
                        return new Result.Success<>(loggedInUser);
                    }
                }
                @Override
                public void onFailure(Call<Post> call, Throwable t) {
                    Log.e(TAG, "Unable to submit post to API.");
                }
            });
        } catch (Exception e) {
            return new Result.Error(new IOException("Error logging in", e));
        }
    }
}
我发现至少有两个这样的问题,并且两个问题都有几乎相同的回调解决方案,但我无法在我的情况下复制它。
提前致谢。
您必须添加自定义回调来处理这种情况。你不能在 onResponse() 和 onFailure() 中返回任何内容
public interface CustomCallback {
    void onSucess(Result<LoggedInUser> value);
    void onFailure();
}
像这样更新你的方法:
public void login(String username, String password,CustomCallback customCallback) {
        try {
            mAPIService = ApiUtils.getAPIService();
           mAPIService.login(username, password, "password").enqueue(new Callback<Post>() {
                @Override
                public void onResponse(Call<Post> call, Response<Post> response) {
                    if(response.isSuccessful()) {
                        LoggedInUser loggedInUser;
                        loggedInUser = new LoggedInUser(response.body().getUserName(),response.body().getUserName(), response.body().getAccess_token());
                        customCallback.onSucess(new Result.Success<>(loggedInUser));
                    }
                }
                @Override
                public void onFailure(Call<Post> call, Throwable t) {
                    Log.e(TAG, "Unable to submit post to API.");
                    customCallback.onFailure();
                }
            });
        } catch (Exception e) {
            e.printStactTrace();
        }
    }
你必须像下面这样调用你的 api:
login("user name","passwor",new CustomCallback(){
       @Override
       public void onSucess(Result<LoggedInUser> value){
      //do your success code here
     }
       @Override
       public void onFailure(){
      }
});
| 归档时间: | 
 | 
| 查看次数: | 5674 次 | 
| 最近记录: |