使用翻新的带有参数的GET请求

时间:2019-01-13 07:37:12

标签: java android retrofit

我正在学习改造。我已经使用PHP Slim构建了一个API,以检查数据库中是否存在用户提供的电子邮件。我的API没问题。我已经通过邮递员对其进行了测试。但是当我调用我的API时,并没有给出正确的结果。

Api.java

package com.example.royta.retrofitdemo.APIs;


import com.example.royta.retrofitdemo.ModelClass.UserExist;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;

public interface Api {

    @GET("finduser")
    Call<UserExist> isUserExist(
            @Query("email") String email
    );

}

请检查屏幕快照以获取JSON响应。

UserExist.java

package com.example.royta.retrofitdemo.ModelClass;

import com.google.gson.annotations.SerializedName;

public class UserExist {
    @SerializedName("email")
    private boolean email;

    public UserExist(boolean email) {
        this.email = email;
    }

    public boolean isEmailExist() {
        return email;
    }
}

RetrofitClient.java

package com.example.royta.retrofitdemo.APIs;

import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class RetrofitClient {
    private static final String BASE_URL = "http://24d00bb3.ngrok.io/MyApi/public/";
    private static RetrofitClient retrofitClient;
    private Retrofit retrofit;

    private RetrofitClient() {
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }

    public static synchronized RetrofitClient getInstance() {
        if(retrofitClient == null) {
            retrofitClient = new RetrofitClient();
        }
        return retrofitClient;
    }

    public Api getApi() {
        return retrofit.create(Api.class);
    }
}

这是电话

FindAccount.java

Call <UserExist> call = RetrofitClient.getInstance().getApi().isUserExist("troy@yahoo.com");

        call.enqueue(new Callback<UserExist>() {
            @Override
            public void onResponse(Call<UserExist> call, Response<UserExist> response) {

                if(response.body().isEmailExist()) {
                    //send code in email;
                    Toast.makeText(FindAccount.this, "Send code in email", Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(FindAccount.this, "You are not registered", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call<UserExist> call, Throwable t) {
                Log.d("ROYs", "onFailure block");
            }
        });

我的数据库中存在电子邮件“ troy@yahoo.com”。但是以下电话给我错误的结果。应该是真的。

response.body().isEmailExist()

屏幕截图是我的API的证明。请帮忙。预先感谢。 enter image description here

2 个答案:

答案 0 :(得分:0)

您将其作为application / x-www-form-urlencoded发送,而不作为GET参数发送。将请求更改为:

@FormUrlEncoded
@GET("finduser")
Call<UserExist> isUserExist(@Field("email") String email);

答案 1 :(得分:0)

最后我找到了问题。 实际上是我的API出现了问题。我在API中使用了getParsedBody()方法来解析参数值。但是它只是从正文中解析。在邮递员中,我从正文中发送请求。因此,它在Postman中运行良好。

我使用getQueryParams()方法代替getParsedBody(),现在它给了我正确的结果。