我正在尝试在注册用户后从改装API获得响应。
我从响应中得到null。body()
函数
注册URL:https://apitest10101.000webhostapp.com/alaa-apii/public/createuser(方法桩)
API返回单个对象JSON,如
{
"error": true,
"message": "User Already Exists"
}
注册Activity.java
public void register(View view) {
if(Validate())
{
Log.d("####", "OKAAAAAY");
first_name = first_name_edit.getText().toString().trim();
last_name = last_name_edit.getText().toString().trim();
email = email_edit.getText().toString().trim();
password = password_edit.getText().toString().trim();
phone = Integer.parseInt(phone_edit.getText().toString().trim());
state = state_edit.getText().toString().trim();
block = block_edit.getText().toString().trim();
street = street_edit.getText().toString().trim();
building = buidling_edit.getText().toString().trim();
floor = floor_edit.getText().toString().trim();
flat = flat_edit.getText().toString().trim();
Call<ResultModel> call = RetrofitClient
.getInstance()
.getApi()
.createUser(first_name, last_name, email, password, phone, postionOfReigon, state, block, street, building, floor, flat);
call.enqueue(new Callback<ResultModel>() {
@Override
public void onResponse(Call<ResultModel> call, Response<ResultModel> response) {
boolean error = false;
String mass = null;
if (response.body() != null) { // response null !!!!!!!!!!!
error = response.body().getError();
mass = response.body().getMessage();
Log.d("#####", error + "------" + mass);
}
Log.d("#####", error + "------" + mass);
}
@Override
public void onFailure(Call<ResultModel> call, Throwable t) {
Toast.makeText(RegisterActivity.this, t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
else
{
Log.d("####", "NNNOOTT OKAAAAAY");
}
}
如果我删除response.body()
中的if语句,我在日志中得到了这个错误
2019-11-10 12:45:51.242 21211-21211/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 21211
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Boolean com.example.myapplication.ResultModel.getError()' on a null object reference
at com.example.myapplication.RegisterActivity$2.onResponse(RegisterActivity.java:161)
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1$1.run(DefaultCallAdapterFactory.java:83)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
结果模型。Java语言
package com.example.myapplication;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class ResultModel {
@SerializedName("error")
@Expose
private Boolean error;
@SerializedName("message")
@Expose
private String message;
public ResultModel(Boolean error, String message) {
this.error = error;
this.message = message;
}
public Boolean getError() {
return error;
}
public void setError(Boolean error) {
this.error = error;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
改装客户端。Java语言
package com.example.myapplication;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitClient {
private static final String BASE_URL = "https://apitest10101.000webhostapp.com/alaa-apii/public/";
private static RetrofitClient mInstance;
private Retrofit retrofit;
private RetrofitClient(){
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public static synchronized RetrofitClient getInstance()
{
if(mInstance == null)
{
mInstance = new RetrofitClient();
}
return mInstance;
}
public Api getApi()
{
return retrofit.create(Api.class);
}
}
API接口
package com.example.myapplication;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
public interface Api {
@FormUrlEncoded
@POST("createuser")
Call<ResultModel> createUser(
@Field("firstname") String firstname,
@Field("lastname") String lastname,
@Field("email") String email,
@Field("password") String password,
@Field("phone") int phone,
@Field("region") int region,
@Field("state") String state,
@Field("block") String block,
@Field("street") String street,
@Field("building") String building,
@Field("floor") String floor,
@Field("flat") String flat
);
}
建造Gradle
implementation 'com.squareup.retrofit2:retrofit:2.6.2'
implementation 'com.squareup.retrofit2:converter-gson:2.6.2'
getError()应返回false或true,getMessage()应返回消息User ready Exists或User created successfully。
我使用超薄框架v3.12来构建api。
**任何建议**
您获得的响应代码是422,如果后端和前端同意此代码不是错误,那么您可以通过创建自定义Interceptor
并让它仍然返回您在获得该响应代码时获得的响应,只需确保将Interceptor
添加到您的Retrofit客户端
似乎您正在以http状态获取422。任何不是2XX状态码的代码都会通过改装被视为错误,在这种情况下,您可以使用响应来访问它。errorBody()。
不太好的消息是它必须手动转换。一种方法是使用response.errorbody(). string()
。
请确保只调用一次,因为在第一次读取后,它将不再可读。这是一种溪流般的行为。
问题内容: 我正在尝试返回我从调用请求中的方法获取的值,有没有一种方法可以使我从重写的方法中获取该值?这是我的代码: 我无法获取值,因为要能够在方法中使用它,我需要将其声明为final,而我无法给它赋值。 问题答案: 问题是您试图同步返回的值,但是它是使用回调的异步方法,因此您无法做到这一点。您有2个选择: 您可以更改方法以接受回调,然后将回调链接到该方法。这类似于在rxJava之类的框架中进行映
我在应用程序中使用这些库: 执行官网。收拾一下。改装2:改装:2.4.0' 执行官网。收拾一下。改装2:变流器gson:2.3.0' 实现'com.squareup.okhttp3: okhttp: 3.10.0' 这是我的RetroFitClientInstance类实现: 直到今天早上它是没有问题,但从今天早上它是不工作和getMessage在onFailure返回null和t.toStrin
问题内容: 就像一个人在这里问到但他的解决方案是调用其他函数 …我想知道是否有可能拥有一个不调用a的函数第二个功能基于异步请求的响应,但仅当异步请求响应时。 可能是这样的: 不调用另一个函数,这有可能吗? 我要实现的目标是拥有一个可以用一些参数调用的函数,该函数将返回异步Web服务(如FB)的响应。 问题答案: 简而言之,没有。您不能让异步函数同步返回有意义的值,因为该值当时不存在(因为它是在后台
所以我想打印响应的结果,然后使用gson为模型生成数据,但响应永远不会得到返回,因为调用了onResponse。! 如果你注意到Logcat,日志。我的回答没有显示。。!?但是在使用该请求的活动的onSuccess中,它通常会显示日志,但是如果日志包含响应对象,它不会显示哪个非常奇怪,也没有任何意义。。!? Logcat公司 我尝试使用具有相同url和参数的PostMan测试请求,它通常返回jso
问题内容: 在我的科目表中,我按学期和月份列出了所有学生的课程,每个月的分数 这就是我尝试过的 我从查询中获得的当前输出是每个查询的多个响应,因为我可以将其更改为,但不会获取其他数据 我的问题是我如何将它们合并为一个响应,并在预期的输出中返回以下数据(我在每个字段中添加了一些说明以对其进行解释) 预期产量 问题答案: 问题是,您想获取主题,而不是学生。因此,我反转了FROM和LEFT JOIN。因
我使用的是Spring版本4(Spring data),我想将Object作为JSON返回,我想知道以下代码即使不使用xmlRootElement注释用户类也能工作: 任何机构都可以解释吗?当我需要注释要返回为JSON的对象类时,响应体/响应实体是否自己完成工作?