Java 在改型调用中访问接口方法时出现Nullpointerexception
Java 在改型调用中访问接口方法时出现Nullpointerexception,java,android,retrofit,Java,Android,Retrofit,inversion调用中访问接口方法时出现的Nullpointerexception Userservice.class public interface UserService { @POST("login") Call<ResUser> login(@Body login login); } public class RetrofitClient { private static Retrofit retrofit=null; public
inversion
调用中访问接口方法时出现的Nullpointerexception
Userservice.class
public interface UserService {
@POST("login")
Call<ResUser> login(@Body login login);
}
public class RetrofitClient {
private static Retrofit retrofit=null;
public static Retrofit getClient(String url){
if(retrofit==null){
retrofit=new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
private void doLogin(String username,String password){
Call<ResUser> call=userService.login(new login(username,password));
call.enqueue(new Callback<ResUser>() {
@Override
public void onResponse(Call<ResUser> call, Response<ResUser> response) {
if(response.isSuccessful()){
Log.e("succes");
}
}
@Override
public void onFailure(Call<ResUser> call, Throwable t) {
}
});
}
login.class
public interface UserService {
@POST("login")
Call<ResUser> login(@Body login login);
}
public class RetrofitClient {
private static Retrofit retrofit=null;
public static Retrofit getClient(String url){
if(retrofit==null){
retrofit=new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
private void doLogin(String username,String password){
Call<ResUser> call=userService.login(new login(username,password));
call.enqueue(new Callback<ResUser>() {
@Override
public void onResponse(Call<ResUser> call, Response<ResUser> response) {
if(response.isSuccessful()){
Log.e("succes");
}
}
@Override
public void onFailure(Call<ResUser> call, Throwable t) {
}
});
}
我在这行中有nullpointerexception
Call<ResUser> call=userService.login(new login(username,password));
Call Call=userService.login(新登录名(用户名、密码));
我认为您的问题在于登录
方法,您应该在呼叫前检查null
用户名和密码:
Call Call=userService.login(新登录名(用户名、密码))
如果对您有帮助,请接受我的回答。添加此
UserService UserService=ApiUtils.getUserService()代码>调用登录服务之前的代码行call call=userService.login(新登录(用户名、密码))代码>
UserService UserService=ApiUtils.getUserService();
Call Call=userService.login(新登录名(用户名、密码));
您应该有一个名为UserService的UserService接口实例来调用login()方法。问题是您在这里传递用户名和密码,所以不要使用构造函数,而是尝试使用getter setters
在调用userService类之前,还要创建该类的对象,因为它未在代码中实例化
UserService userservice = ApiUtils.getUserService();
然后尝试以下方法:
Call<ResUser> call=userService.login(new login(username,password));
Call Call=userService.login(新登录名(用户名、密码));
您需要传递您在此处定义的类Login对象,它将获得一个Login对象:
@POST("login")
Call<ResUser> login(@Body login login);
@POST(“登录”)
调用登录(@Body-login-login);
现在的解决方案是,如果服务器需要登录类的对象,则:
在此之前:
Call<ResUser> call=userService.login(new login(username,password));
Call Call=userService.login(新登录名(用户名、密码));
创建login类的对象,并为该对象设置用户名和密码,然后将该对象作为:
Login login = new Login();
login.setuserName(username);
login.setpassword(password);
UserService userservice = ApiUtils.getUserService();
Call<ResUser> call=userService.login(login);
Login Login=new Login();
login.setuserName(用户名);
login.setpassword(密码);
UserService UserService=ApiUtils.getUserService();
Call Call=userService.login(login);
现在,如果您的服务器要求在正文中分别包含用户名和密码,而不包含登录对象,则您需要更改:
@POST("login")
Call<ResUser> login(@Body login login);
@POST(“登录”)
调用登录(@Body-login-login);
致:
@POST(“登录”)
调用登录名(@Path(“用户名”)字符串用户名,@Path(“密码”)字符串密码);
但是,由于您在此处的web服务路径@POST(“login”)显示您不需要用户名和密码,所以第一个解决方案就是您的解决方案。创建一个类login对象,并在调用时传递它,正如我上面所述。不,这并不能解决我的问题,仍然在同一行上获取空指针确定我看到了您的错误。在下面添加一行:UserService UserService=ApiUtils.getUserService();Call Call=userService.login(新登录名(用户名、密码))。。。。。请添加logcat..解决了我的问题谢谢