Java 改装排队不需要';不是工作而是执行工作

Java 改装排队不需要';不是工作而是执行工作,java,android,http,retrofit,Java,Android,Http,Retrofit,我正在使用com.squareup.reformation2:reformation:2.2.0 HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); httpCl

我正在使用com.squareup.reformation2:reformation:2.2.0

    HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
    logging.setLevel(HttpLoggingInterceptor.Level.BODY);

    OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
    httpClient.addInterceptor(logging);


    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://localhost:9000")
            .addConverterFactory(GsonConverterFactory.create())
            .client(httpClient.build())
            .build();

    final UserService service = retrofit.create(UserService.class);

    Call<User> userCall = service.createUser(user)
将您的代码如下所示:

 userCall.enqueue(new Callback<User>() {
    @Override
    public void onResponse(Call<User> call, Response<User> response) {
        Toast.makeText(this, "in response", Toast.LENGTH_SHORT).show(); 
    }

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

        Toast.makeText(this, "in response", Toast.LENGTH_SHORT).show(); 
    }
});
userCall.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Toast.makeText(这是“响应”,Toast.LENGTH_SHORT).show();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(这是“响应”,Toast.LENGTH_SHORT).show();
}
});

现在,根据方法调用,您将获得toast,如果其响应toast为“响应中”,请不要忘记在前面写上您的活动名称,如:MainActivity。您可以尝试此完整答案

这是最短的代码snippest

    private void emailLoginRequest() {
    LoginService loginService = ApiFactory.createService(LoginService.class);
    Call<JsonObject> call = loginService.login(edtEmail.getText().toString(),edtPassword.getText().toString(),mDeviceType,mDeviceToken);
    call.enqueue(new Callback<JsonObject>() {
        @Override
        public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
            hideProgressDialog();
            if (response.isSuccessful()) {
                LOGD(TAG, "onResponse 0: " + response.body().toString());
                LoginResponse loginResponse = new Gson().fromJson(response.body().toString(), LoginResponse.class);

                System.out.println("+++ get message >> " + loginResponse.getMessage());
                int status = loginResponse.getStatus();

            }else {
                LOGD(TAG, "response fail 0: " + response.body());
            }
        }

        @Override
        public void onFailure(Call<JsonObject> call, Throwable t) {
            hideProgressDialog();
            LOGD(TAG, "onFailure: " + t.getMessage());
        }
    });
}
private void emailLoginRequest(){
LoginService LoginService=apifacture.createService(LoginService.class);
Call Call=loginService.login(edtEmail.getText().toString(),edtPassword.getText().toString(),mDeviceType,mDeviceToken);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
hideProgressDialog();
if(response.issusccessful()){
LOGD(标记,“onResponse 0:+response.body().toString());
LoginResponse LoginResponse=new Gson().fromJson(response.body().toString(),LoginResponse.class);
System.out.println(“+++获取消息>>”+loginResponse.getMessage());
int status=loginResponse.getStatus();
}否则{
LOGD(标记,“响应失败0:+response.body());
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
hideProgressDialog();
LOGD(标记“onFailure:+t.getMessage());
}
});
}

这个问题是因为我使用了一个模拟器并试图调用本地主机,但是,如果你想调用本地主机,你必须使用这个ip
10.0.2.2

execute
之所以有效,是因为我是作为单元测试运行的,但当它运行
enqueue
时,我认为它需要在android平台上运行

参考这个

改型可以通过两种方法分别调用:一种是同步的,另一种是异步的

排队是一种异步方式,它不等待响应并继续。在这里,您需要单独处理调用,以便稍后加载UI

Execute是异步调用RESTAPI并等待得到响应并处理它


明智的选择

但是你能在日志中看到请求已经发出吗?不,当我运行它时没有日志。但当我运行execute时,它显示logwell两种方法都不会被调用,以防您希望在本地主机上运行web服务。您始终可以通过修改emulator的主机文件将ip定义为redirec。这是一个很好的选项,不会带来任何麻烦。
    private void emailLoginRequest() {
    LoginService loginService = ApiFactory.createService(LoginService.class);
    Call<JsonObject> call = loginService.login(edtEmail.getText().toString(),edtPassword.getText().toString(),mDeviceType,mDeviceToken);
    call.enqueue(new Callback<JsonObject>() {
        @Override
        public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
            hideProgressDialog();
            if (response.isSuccessful()) {
                LOGD(TAG, "onResponse 0: " + response.body().toString());
                LoginResponse loginResponse = new Gson().fromJson(response.body().toString(), LoginResponse.class);

                System.out.println("+++ get message >> " + loginResponse.getMessage());
                int status = loginResponse.getStatus();

            }else {
                LOGD(TAG, "response fail 0: " + response.body());
            }
        }

        @Override
        public void onFailure(Call<JsonObject> call, Throwable t) {
            hideProgressDialog();
            LOGD(TAG, "onFailure: " + t.getMessage());
        }
    });
}