我正在学习改造。我已经使用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()
答案 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(),现在它给了我正确的结果。