【问题标题】:getResponse() - java.lang.NullPointerException: [duplicate]getResponse() - java.lang.NullPointerException:[重复]
【发布时间】:2018-09-05 15:50:30
【问题描述】:

我一直在谷歌搜索和谷歌搜索如何让它工作,但我尝试的一切都会让我遇到同样的错误。这是我的代码

package com.gwiddle.airsoftcreations.airsoftapp;


import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import retrofit2.Call;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText; 
import retrofit2.Callback;
import retrofit2.Response;

public class SignUpFragment extends Fragment {

private EditText Name, Username, UserPassword;

private Button BnSignup;


public SignUpFragment() {


}

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup 
container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_sign_up, container, 
false);
    Name = view.findViewById(R.id.name);
    Username = view.findViewById(R.id.username);
    UserPassword = view.findViewById(R.id.password);
    BnSignup = view.findViewById(R.id.btnSignup);

    BnSignup.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view){
            performRegistration();
        }
    });

    return view;

}

public void performRegistration(){
    String name = Name.getText().toString();
    String username = Username.getText().toString();
    String password = UserPassword.getText().toString();
    Call<User> call = 
MainActivity.apiInterface.performRegistration(name,username,password);





            call.enqueue(new Callback<User>() {
                @Override
                public void onResponse(@NonNull Call<User> call, @NonNull 
 Response<User> response) {

                    if (response.body().getResponse().equals("ok"))
                    {
                        MainActivity.prefConfig.displayToast("Ready to 
  Deploy.....");
                    }
                    else if (response.body().getResponse().equals("exist"))
                    {
                        MainActivity.prefConfig.displayToast("User Already 
 In Squad, Try again.");

                    }
                    else if (response.body().getResponse().equals("error"))
                    {
                        MainActivity.prefConfig.displayToast("KIA.. 
Something Went Wrong.");

                    }

                }
                }

                @Override
                public void onFailure(@NonNull Call<User> call, @NonNull 
 Throwable t) {

                }
            });

    Name.setText("");
    Username.setText("");
    UserPassword.setText("");
  }
  }

我和我的伙伴都是 java 新手,花了一整天的时间来解决这个问题

这是我得到的错误

E/AndroidRuntime: 致命异常: main 进程:com.gwiddle.airsoftcreations.airsoftapp,PID:20606 java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String com.gwiddle.airsoftcreations.airsoftapp.User.getResponse()' 为空 对象引用 在 com.gwiddle.airsoftcreations.airsoftapp.SignUpFragment$2.onResponse(SignUpFragment.java:64) 在 retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70) 在 android.os.Handler.handleCallback(Handler.java:809) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:166) 在 android.app.ActivityThread.main(ActivityThread.java:7377) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)

【问题讨论】:

  • 我对 Retrofit 不是很熟悉,但看起来对 response.body() 的调用返回 null。并非所有 HTTP 请求都包含响应正文。例如,这可能发生在错误代码或重定向代码的情况下。我建议在第 64 行附加一个调试器并通过调试工具检查响应,特别是寻找响应代码。还要检查 logcat 输出,改造可能会在那里输出一些东西。
  • SignUpFragment.java:64 第 64 行是什么?
  • if (response.body().getResponse().equals("ok")) {
  • @CallumJackson 嗨有解决方案吗?

标签: java android nullpointerexception retrofit2


【解决方案1】:

在这些检查的最开始创建一个新的if,如下所示:

if(response.body() == null || response.body().getResponse() == null ){
//show message or whatever
}

【讨论】:

  • 我已经尝试过了,但是我仍然遇到相同错误的应用程序崩溃
【解决方案2】:

通读错误,您正面临NullPointerException

E/AndroidRuntime:致命异常:主进程: com.gwiddle.airsoftcreations.airsoftapp,PID:20606 java.lang.NullPointerException:尝试调用虚拟方法 'java.lang.String com.gwiddle.airsoftcreations.airsoftapp.User.getResponse()' 空对象引用 com.gwiddle.airsoftcreations.airsoftapp.SignUpFragment$2.onResponse(SignUpFragment.java:64)

它说你调用了一个空值的getResponse() 方法。因此,您必须添加 null 检查以确保您不会在 null 引用上调用方法。

例如,如果一个字符串可以为空,那么在调用它的方法之前确保它不为空:

String s = null;
...
if(s != null){
    s.trim();
} 

在您的代码中使用类似的推理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多