【发布时间】: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