为什么我的改装请求中收到“不好的请求”

时间:2019-08-16 18:39:19

标签: android retrofit2

我正在尝试通过改造来注册用户。我的错误在哪里?

这是我的界面:

public interface ChatRoomAPI {
String BASE_URL="https://karyab-api.herokuapp.com/";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create())
.build();
 @POST("register")
 Call<RegisterResponse> registerUser(@Body RegisterData registerData);

这是寄存器pojo类的正文:

public class RegisterData {
@SerializedName("email")
@Expose
private String email;
@SerializedName("password")
@Expose
private String password;
public String getEmail() {return email;}
public void setEmail(String email) {this.email = email;}
public String getPassword() {return password;}
public void setPassword(String password) {this.password = password;}

这是响应pojo类:

public class RegisterResponse {
@SerializedName("user")
@Expose
private User user;
@SerializedName("token")
@Expose
private String token;
public User getUser() {return user;}
public void setUser(User user) {this.user = user;}
public String getToken() {return token;}
public void setToken(String token) { this.token = token;}

我的活动中的代码:

private void registerUser(RegisterData registerData) {
ChatRoomAPI webService =
ChatRoomAPI.retrofit.create(ChatRoomAPI.class);
Call<RegisterResponse> call = webService.registerUser(registerData);
call.enqueue(new Callback<RegisterResponse>() {
@Override
public void onResponse(@NonNull Call<RegisterResponse> call, 
@NonNull Response<RegisterResponse> response) {
if (response.isSuccessful()) {
RegisterResponse body = response.body();
Toast.makeText(LoginActivity.this,
body.getToken(),
Toast.LENGTH_SHORT).show();
}else{
   try {
String errorBodyJson=response.errorBody().string();
Gson gson=new Gson();
ErrorResponce 
errorResponce=gson.fromJson(errorBodyJson, 
ErrorResponce.class);
Toast.makeText(LoginActivity.this,
response.message(),
Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call<RegisterResponse> call, Throwable t) {
Toast.makeText(LoginActivity.this,
"Received " + t.getCause() + " items from service",
Toast.LENGTH_SHORT).show();
}
});

我不知道我的错误在哪里。在邮递员中,我得到200 OK,但是在这里,我得到了错误的请求。

这并不复杂,但是我很累要解决它,请帮助我并节省时间。

这是邮递员的结果:

{
"user": {
"id": 26,
"updatedAt": "2019-08-16T16:35:04.347Z",
"createdAt": "2019-08-16T16:35:04.347Z",
"email": null,
"password": null
},
"token": "eyJhbGciOiJIUzI...
 }

这是邮递员的输入内容。

{
"email":"aaaaa",
"password":"11111"
}

1 个答案:

答案 0 :(得分:0)

您应该使用@FormUrlEncoded

进行尝试

创建类RegResponse

Process: com.example.tokoemak.tokoemak, PID: 5679
    android.database.sqlite.SQLiteException: no such table: OrderDetail (code 1): , while compiling: INSERT INTO OrderDetail(ProdukId,NamaProduk,Jumlah,Harga,Diskon) VALUES('20','ULTRA MILK Susu UHT Putih Full Cream 250 ml','1','5000','0' );
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
        at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1678)
        at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1608)
        at com.example.tokoemak.tokoemak.databases.Database.addToCart(Database.java:59)
        at com.example.tokoemak.tokoemak.activities.ItemDetail$1.onClick(ItemDetail.java:66)
        at android.view.View.performClick(View.java:5647)
        at android.view.View$PerformClick.run(View.java:22465)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:163)
        at android.app.ActivityThread.main(ActivityThread.java:6238)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) Disconnected from the target VM, address: 'localhost:8600', transport: 'socket'

创建班级用户

public class RegResponse{

@SerializedName("user")
private User user;

@SerializedName("token")
private String token;

public void setUser(User user){
    this.user = user;
}

public User getUser(){
    return user;
}

public void setToken(String token){
    this.token = token;
}

public String getToken(){
    return token;
}

@Override
public String toString(){
    return 
        "RegResponse{" + 
        "user = '" + user + '\'' + 
        ",token = '" + token + '\'' + 
        "}";
    }
}

创建界面

public class User{

@SerializedName("createdAt")
private String createdAt;

@SerializedName("password")
private Object password;

@SerializedName("id")
private int id;

@SerializedName("email")
private Object email;

@SerializedName("updatedAt")
private String updatedAt;

public void setCreatedAt(String createdAt){
    this.createdAt = createdAt;
}

public String getCreatedAt(){
    return createdAt;
}

public void setPassword(Object password){
    this.password = password;
}

public Object getPassword(){
    return password;
}

public void setId(int id){
    this.id = id;
}

public int getId(){
    return id;
}

public void setEmail(Object email){
    this.email = email;
}

public Object getEmail(){
    return email;
}

public void setUpdatedAt(String updatedAt){
    this.updatedAt = updatedAt;
}

public String getUpdatedAt(){
    return updatedAt;
}

@Override
public String toString(){
    return 
        "User{" + 
        "createdAt = '" + createdAt + '\'' + 
        ",password = '" + password + '\'' + 
        ",id = '" + id + '\'' + 
        ",email = '" + email + '\'' + 
        ",updatedAt = '" + updatedAt + '\'' + 
        "}";
    }
}

现在进入您的MainActivity

public interface ApiInterface {

@FormUrlEncoded
@POST
Call<RegResponse> register(@Url String url, @Field("email") String user, 
 @Field("password") String password);
}