英文:
Expected BEGIN_OBJECT but was String at line 5 column 1 path$. I am getting this error and turns out any of the solutions doesn't work
问题
我在Github的问题中发现,清理项目工作得很好,但那并没有帮助。我正在使用retrofit 2。以下是依赖项 -
implementation 'com.squareup.retrofit2:retrofit:2.8.1'
implementation 'com.squareup.retrofit2:converter-gson:2.8.1'
implementation 'com.google.code.gson:gson:2.8.5'
我的模型类
public class Register {
private String email, password, firstname, lastname, snuid;
public Register(String email, String password, String firstname, String lastname, String snuid) {
this.email = email;
this.password = password;
this.firstname = firstname;
this.lastname = lastname;
this.snuid = snuid;
}
}
我的JsonApiHolder类
public interface Pythonforeverybody {
@GET("medicines")
Call<List<Post>> getprods();
@GET("medicines/{id}")
Call<List<Post>> getprods(@Path("id") int id1);
@POST("register/")
Call<Register> getreg(@Body Register register);
}
以及MainActivity中的一个方法
private void postcontent() {
Register register = new Register("ss501@snu.edu.in",
"123456","Shardul","Singh","ss501");
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://Some API")
//我在这里提供了正确的API链接,没有问题
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
Pythonforeverybody jsonPlaceHolderApi = retrofit.create(Pythonforeverybody.class);
Call<Register> call = jsonPlaceHolderApi.getreg(register);
call.enqueue(new Callback<Register>() {
@Override
public void onResponse(Call<Register> call, Response<Register> response) {
if (!response.isSuccessful()) {
tv.setText("Code hh: " + response.code());
return;
}
String content = "";
content += "Code " + response.code() + "\n";
tv.append(content);
}
@Override
public void onFailure(Call<Register> call, Throwable t) {
tv.setText(t.getMessage());
}
});
}
英文:
I found on Github issues that cleaning the project works just fine but that didn't help.
I am using retofit 2. And these are the dependencies-
implementation 'com.squareup.retrofit2:retrofit:2.8.1'
implementation 'com.squareup.retrofit2:converter-gson:2.8.1'
implementation 'com.google.code.gson:gson:2.8.5'
My model class
public class Register {
private String email,password,firstname,lastname,snuid;
public Register(String email, String password, String firstname, String lastname, String snuid) {
this.email = email;
this.password = password;
this.firstname = firstname;
this.lastname = lastname;
this.snuid = snuid;
}
}
My JsonApiHolder class
public interface Pythonforeverybody {
@GET("medicines")
Call<List<Post>> getprods();
@GET("medicines/{id}")
Call<List<Post>> getprods (@Path("id") int id1);
@POST("register/")
Call <Register> getreg(@Body Register register);
}
And a method in Main activity
private void postcontent() {
Register register = new Register("ss501@snu.edu.in",
"123456","Shardul","Singh","ss501");
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https:// Some API")
//I gave the correct Api link over here, no problem with that
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
Pythonforeverybody jsonPlaceHolderApi = retrofit.create(Pythonforeverybody.class);
Call<Register> call = jsonPlaceHolderApi.getreg(register);
call.enqueue(new Callback<Register>() {
@Override
public void onResponse(Call<Register> call, Response<Register> response) {
if (!response.isSuccessful()) {
tv.setText("Code hh: " + response.code());
return;
}
String content = "";
content += "Code " + response.code() + "\n";
tv.append(content);
}
@Override
public void onFailure(Call<Register> call, Throwable t)
{
tv.setText(t.getMessage());
}
});
}
}
答案1
得分: 0
使用以下代码:
@POST("register/?format=json")
Call<Register> getreg(@Body Register register);
而不是:
@POST("register/")
Call<Register> getreg(@Body Register register);
英文:
Use this:
@POST("register/?format=json")
Call <Register> getreg(@Body Register register);
instead of
@POST("register/")
Call <Register> getreg(@Body Register register);
专注分享java语言的经验与见解,让所有开发者获益!
评论