java - POST API 从改造返回空值,但在邮递员中工作
问题描述
我对改造和android有点新,所以我真的很尴尬
当我尝试使用具有以下结构的 API 时,请参阅以下错误我从 Retrofit 得到
错误
D/LOGIN: onResponse: >> UserOutputObj{response='null', response_text='null', user=null, status=null, response_Code=0, message='null', msg='null', token='null', zero=0}
请在不出现上述错误的情况下向我建议如何使用 API。
请参阅下面的代码
改造客户端实例
public static Retrofit getLogInRetrofitInstance() {
if (retrofit == null) {
Gson gson = new GsonBuilder()
.setLenient()
.create();
retrofit = new retrofit2.Retrofit.Builder()
.baseUrl(LOG_IN_BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
}
return retrofit;
}
登录数据服务
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Headers;
import retrofit2.http.POST;
public interface GetLogInDataService {
@Headers("Content-Type: application/json")
@POST("login")
Call<UserOutputObj> getServiceData(@Body LoginInputObj input);
}
实际执行
//retrofit starts ===
GetLogInDataService service = RetrofitClientInstance.getLogInRetrofitInstance().create(GetLogInDataService.class);
Call<OutputObj> call = service.getServiceData(myLoginInp);
call.enqueue(new Callback<OutputObj>() {
@Override
public void onResponse(Call<OutputObj> call, Response<OutputObj> response) {
OutputObj finalOutput = response.body();
Log.d(TAG, "onResponse: >> "+ response.body().toString());
assert finalOutput != null;
Log.d(TAG, "onResponse: finalOutput >>" + finalOutput.toString());
UserInfo user = finalOutput.getUser();
Log.d(TAG, "onResponse: user:" + user);
if (user != null) {
Login_Token = finalOutput.getToken();
Login_Message = finalOutput.getMessage();
Login_status = finalOutput.getStatus(); if (Login_status) {
Log.d(TAG, "onResponse: status is Successful");
type = user.getType();
name = user.getFullname();
dob = user.getDob();
city = user.getCity();
email = user.getEmail();
id = String.valueOf(user.getId());
gender = user.getGender();
rating = user.getRating();
Log.d(TAG, "doInBackground: Login_Token: " + Login_Token);
} else {
Log.d(TAG, "onResponse: status is false");
}
Log.d(TAG, "doInBackground: VERIFY: " + Login_status);
Log.d(TAG, "doInBackground: Login_Message: " + Login_Message);
server_check = true;
}
@Override
public void onFailure(Call<UserOutputObj> call, Throwable t) {
Log.d(TAG, "onFailure: INSIDE: onFailure");
Log.d(TAG, "onFailure: INSIDE: onFailure");
Log.d(TAG, "onFailure: AN ERROR OCCURRED");
Log.d(TAG, "onFailure: Cause " + t.getCause());
Log.d(TAG, "onFailure: getMessage " + t.getMessage());
Toast.makeText(LoginActivity.this, "Something went wrong...Please try later!", Toast.LENGTH_SHORT).show();
}
});
日志输出
D/LOGIN: onResponse: >> UserOutputObj{response='null', response_text='null', user=null, status=null, response_Code=0, message='null', msg='null', token='null', zero=0}
D/LOGIN: onResponse: finalOutput >>UserOutputObj{response='null', response_text='null', user=null, status=null, response_Code=0, message='null', msg='null', token='空',零= 0}
我希望得到以下 JSON FAILURE RESPONSE 或 JSON SUCCESS RESPONSE 而不是我不断得到的空响应
JSON 失败响应
{
"OutputObject": {
"response": "0",
"status": false,
"response_text": "user does not exists",
"message": "Number Not exist",
"response_Code": 400
}
}
JSON 成功响应
{
"response": {
"status": true,
"message": "Login Succesful",
"token": "160444ef2fe0321-12P28071e2d6934764",
"user": {
"id": 3,
"created_at": "2020-11-03T19:40:34.000000Z",
"updated_at": "2020-11-03T19:40:34.000000Z",
"fullname": "Mr Guy 4",
"email": "mekefesassfeghe@gmail.com",
"email_verified_at": "2020-11-03T21:52:01.941539Z",
"type": "Customer",
"father_name": null,
"gender": "male",
"dob": "1983/01/26",
"number": "19077834474589",
"city": "Yosemeni Park",
"state": "Las Vegas",
"country": "United States",
"address": "No 500 Correct address street",
"status": "",
"rating": 0,
"token_id": "",
"reg_date": "2020-11-03 19:40:34"
},
"response_Code": 200
}
}
序列化对象
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OutputObj implements Serializable {
@Getter
@Setter
private String response;
@Getter
@Setter
private String response_text;
@Getter
@Setter
private UserInfo user;
@Getter
@Setter
private Boolean status;
@Getter
@Setter
private int response_Code;
@Getter
@Setter
private String message;
@Getter
@Setter
private String msg;
@Getter
@Setter
private String token;
@Getter
@Setter
private int zero;
@Override
public String toString() {
return "OutputObj{" +
"response='" + response + '\'' +
", response_text='" + response_text + '\'' +
", user=" + user +
", status=" + status +
", response_Code=" + response_Code +
", message='" + message + '\'' +
", msg='" + msg + '\'' +
", token='" + token + '\'' +
", zero=" + zero +
'}';
}
}
使用 Postman 调用 API 时,该 API 运行良好,但使用改造从应用程序返回空值 请告知我使用 API 的方式,因为我已经为此苦恼了一个星期
解决方案
我猜改造不喜欢单斜杠我需要将基本 URL 更改为没有斜杠的东西
推荐阅读
- android - JavaFX 支持 Android 上的 64 位要求
- ionic-framework - 单元测试 - 离子框架中的警报控制器出现问题
- python - 无法对python循环中的变量值求和。修复它的方法是什么?
- c++ - 指针返回值地址
- shell - 如果 shell 脚本中的命令失败,不确定如何发送错误代码
- google-sheets - 将特定列转换为 Google 表格中的行
- javascript - 如何使用 ifelse 语句通过 JavaScript DropDown 掩码访问 LimeSurvey 用户输入?
- java - AWS JVM CPU 限制上的 Docker
- javascript - google-map-react 使用多个标记使地图居中
- nmap - nmap 找不到 nse_main.lua