Android 使用改装库获取响应时出错

Android 使用改装库获取响应时出错,android,retrofit,Android,Retrofit,我正在使用改型库获取检查登录凭据。包含响应的php文件如下 login.php ... if ($user["invalid credentials"] != "true"){ $response["error"] = FALSE; $response["id"] = $user["credentials"]["admin_id"]; $response["username"] = $user["credentials"]["username"]; $resp

我正在使用改型库获取检查登录凭据。包含响应的php文件如下 login.php

 ...
 if ($user["invalid credentials"] != "true"){
    $response["error"] = FALSE;
    $response["id"] = $user["credentials"]["admin_id"];
    $response["username"] = $user["credentials"]["username"];
    $response["password"] = $user["credentials"]["password"];
    $response["email"] = $user["credentials"]["email"];
    echo json_encode($response);
  }
else {
    $response["error"] = TRUE;
    $response["error_msg"] = "Τα στοιχεία εισόδου είναι λάθος. Παρακαλώ ξαναπροσπάθησε.";
    echo json_encode($response);
}
...
波乔班

 public class User {
      private int id;
      private String error, error_msg, username, email, password;

public String getError(){
    return this.error;
}

public String getError_msg(){
    return this.error_msg;
}

public int getId(){
    return this.id;
}

public String getUsername(){
    return this.username;
}

public String getPassword(){
    return this.password;
}

public String getEmail(){
    return this.email;
}
 }
我的api服务接口,其中validateUser方法具有用户输入的用户名和密码 蜂房服务

   public interface ApiService {

@FormUrlEncoded
@POST("/login/login.php/")
Call<User> validateUser(@Field("username") String username, @Field("password") String password);
 }
公共接口服务{
@FormUrlEncoded
@POST(“/login/login.php/”)
调用validateUser(@Field(“用户名”)字符串用户名,@Field(“密码”)字符串密码);
}
以及我创建改造对象的checkLogin方法

private void checkLogin(String username, String password){

    Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl(AppConfig.BASE_URL)
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();

    ApiService apiService = retrofit.create(ApiService.class);
    Call<User> call = apiService.validateUser(username, password);
    call.enqueue(new Callback<User>() {
        @Override
        public void onResponse(retrofit.Response<User> response, Retrofit retrofit) {
                String email = response.body().getEmail();
                Log.d(debugTag, "email: " + email);
        }

        @Override
        public void onFailure(Throwable t) {

        }
    });
 }
private void checkLogin(字符串用户名、字符串密码){
改装改装=新改装.Builder()
.baseUrl(AppConfig.BASE\u URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiService ApiService=reformation.create(ApiService.class);
Call Call=apiService.validateUser(用户名、密码);
call.enqueue(新回调(){
@凌驾
公共响应(改装。响应,改装){
字符串email=response.body().getEmail();
Log.d(debugTag,“email:+email”);
}
@凌驾
失效时的公共无效(可丢弃的t){
}
});
}
当我试图获取用户的电子邮件时(如果凭据有效),会发生此错误。我得到一个空指针异常…我的POJO类有问题吗

致命异常:主 11-09 22:51:06.152 21558-21558/com.votingsystem.tsiro.votingsystem
E/AndroidRuntime:Process:com.votingsystem.tsiro.votingsystem,PID:21558 11-09 22:51:06.152 21558-21558/com.votingsystem.tsiro.votingsystem
E/AndroidRuntime:java.lang.NullPointerException 11-09 22:51:06.152 21558-21558/com.votingsystem.tsiro.votingsystem
E/AndroidRuntime:com.votingsystem.tsiro.fragments.LoginFragment$4.onResponse(LoginFragment.java:175) 11-09 22:51:06.152 21558-21558/com.votingsystem.tsiro.votingsystem
E/AndroidRuntime:at reformation.ExecutorCallAdapterFactory$ExecutorCallback$1.run(ExecutorCallAdapterFactory.java:86) 11-09 22:51:06.152 21558-21558/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:at android.os.Handler.handleCallback(Handler.java:733)11-09 22:51:06.152 21558-21558/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:
在android.os.Handler.dispatchMessage(Handler.java:95)11-09 22:51:06.152 21558-21558/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:at-android.os.Looper.loop(Looper.java:136)11-09 22:51:06.152 21558-21558/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:at android.app.ActivityThread.main(ActivityThread.java:5146)11-09 22:51:06.152 21558-21558/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:at java.lang.reflect.Method.Invokenactive(本机) 方法)11-09 22:51:06.152 21558-21558/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:
在java.lang.reflect.Method.invoke(Method.java:515)11-09 22:51:06.152 21558-21558/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:
在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732) 11-09 22:51:06.152 21558-21558/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)11-09 22:51:06.152 21558-21558/com.votingsystem.tsiro.votingsystem E/AndroidRuntime:at dalvik.system.NativeStart.main(本机方法)


使用最新版本的改型,即2.0.0,它允许完整的url支持,并从此创建您的pojo。在深入了解改型2.0.0文档后,我终于设法解决了这个问题。根据本指南,HttpUrl.resolve()方法创建类似于的链接。之后,我删除了覆盖我的基本url最后一部分的部分url@POST(“/login/login.php/”)的前导/并将其添加到我的基本url中,一切都按照预期进行

发布异常的堆栈跟踪和Web服务的响应