android - 改造错误应为 BEGIN_OBJECT,但在第 1 行第 1 列为 STRING
问题描述
我正在尝试解决此错误,但找不到任何解决方案来解决我的问题,因为我已经尝试了所有给定的链接,这就是我必须来到这里的原因。
我正在尝试注册用户,但不能。请帮助我,因为这个问题已经占用了我一整天。提前致谢。
我的 ApiClient.Java 在这里
public class ApiClient {
private static final String BASE_URL = "http://IPAdress/foldername/";
private static Retrofit retrofit = null;
private static Gson gson = new GsonBuilder()
.setLenient()
.create();
public static Retrofit getApiClient(){
if (retrofit==null){
retrofit=new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
}
return retrofit;
}
用户.Java 类
public class User {
@SerializedName("response")
private String Response;
@SerializedName("name")
private String Name;
public String getResponse() {
return Response;
}
public String getName() {
return Name;
}
主要活动
public static SessionManager sessionManager;
EditText Name, Email, Password;
Button btn_register, btn_login;
String name, email, password;
Boolean CheckEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
sessionManager = new SessionManager(this);
//if the user is already logged in we will directly start the Profile Fragment
if (sessionManager.readLoginStatus()) {
startActivity(new Intent(this, ProfileFragment.class));
finish();
}
Name = findViewById(R.id.username);
Email = findViewById(R.id.useremail);
Password = findViewById(R.id.userpassword);
btn_register = findViewById(R.id.btnRegister);
btn_login = findViewById(R.id.btnLinkToLoginScreen);
btn_register.setOnClickListener(v -> {
CheckEditTextIsEmptyOrNot();
if (CheckEditText) {
registration();
} else {
Toast.makeText(RegisterActivity.this, "Please fill all form fields.", Toast.LENGTH_SHORT).show();
}
});
btn_login.setOnClickListener(v -> {
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
startActivity(intent);
});
}
public void CheckEditTextIsEmptyOrNot() {
name = Name.getText().toString().trim();
email = Email.getText().toString().trim();
password = Password.getText().toString().trim();
// Checking whether EditText value is empty or not.
// If any of EditText is empty then set variable value as False.
// If any of EditText is filled then set variable value as True.
CheckEditText = !TextUtils.isEmpty(name) && !TextUtils.isEmpty(email) && !TextUtils.isEmpty(password);
}
private void registration() {
ApiInterface apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
Call<User> call = apiInterface.performRegistration(name, email, password);
call.enqueue(new Callback<User>() {
@Override
public void onResponse(@NonNull Call<User> call, @NonNull Response<User> response) {
assert response.body() != null;
switch (response.body().getResponse()) {
case "ok":
RegisterActivity.sessionManager.displayToast("Registration Success...");
break;
case "exist":
RegisterActivity.sessionManager.displayToast("User Already Exist...");
break;
case "error":
RegisterActivity.sessionManager.displayToast("Something Went Wrong...");
break;
}
}
@Override
public void onFailure(@NonNull Call<User> call, @NonNull Throwable t) {
Log.d("onFailure", t.toString());
Toast.makeText(RegisterActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
解决方案
像这样创建一个类
public class MyResponse {
@SerializedName("response")
private String response;
//Constructor
//GET and SET
}
然后你的服务应该返回 aCall<MyResponse>
然后像你一样检查身体,它应该可以工作。
推荐阅读
- node.js - 一些 HMR 触发后节点崩溃
- python - 创建熊猫矢量化的“减法”表
- python - 加载模型后,model.summary() 中的 LSTM 超参数不可用
- r - R CMD REMOVE 无效
- java - 逆序单链表Java
- c# - 实体框架查询在负载测试中针对一个请求执行多次
- php - 如何计算 php 中的 DateTime 差异,它也适用于夏令时?
- python-3.x - scrapy.pipeline ImagePipeline func file_path 。当我返回 str
- javascript - 如何创建函数以避免重复步骤?
- android - ¿ 添加新标签时如何保留 TabLayout 的滚动?