Nullpointerexception
访问retrofit
调用
Userservice.class
public interface UserService {
@POST("login")
Call<ResUser> login(@Body login login);
}
RetrofitClient.class
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;
}
}
login.class
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) {
}
});
}
ApiUtils.class
public class ApiUtils {
public static final String BASE_URL="";
public static UserService getUserService(){
return RetrofitClient.getClient(BASE_URL).create(UserService.class);
}
}
我在此行 nullpointerexception
Call<ResUser> call=userService.login(new login(username,password));
答案 0 :(得分:0)
我认为你的问题在login
方法中,你应该在致电之前检查null
用户名和密码:
Call call = userService.login(new login(username,password));
如果对你有帮助,请接受我的回答。
答案 1 :(得分:0)
在您拨打登录服务UserService userService = ApiUtils.getUserService();
Call<ResUser> call=userService.login(new login(username,password));
代码行
UserService userService = ApiUtils.getUserService();
Call<ResUser> call=userService.login(new login(username,password));
你应该有一个名为userService的UserService接口实例来调用方法login()
答案 2 :(得分:0)
好友问题是你在这里传递用户名和密码,所以不要使用构造函数尝试使用getter setter。
在调用之前还要创建userService类的对象,因为它没有在代码中实例化。
UserService userservice = ApiUtils.getUserService();
然后尝试以下方式:
Call<ResUser> call=userService.login(new login(username,password));
您需要按照此处的定义传递类Login的Object,它将获得login的对象:
@POST("login")
Call<ResUser> login(@Body login login);
现在的解决方案是,如果您的服务器需要登录类的对象,那么:
在此之前:
Call<ResUser> call=userService.login(new login(username,password));
创建登录类的对象并为该对象设置用户名和密码,然后将此对象传递为:
Login login = new Login();
login.setuserName(username);
login.setpassword(password);
UserService userservice = ApiUtils.getUserService();
Call<ResUser> call=userService.login(login);
现在,如果你的服务器在没有登录对象的情况下需要单独使用用户名和密码,那么你需要更改它:
@POST("login")
Call<ResUser> login(@Body login login);
为:
@POST("login")
Call<ResUser> login(@Path("userName") String userName,@Path("password") String password);
但是,你的网络服务路径 @POST(&#34;登录&#34;)表明你不需要用户名和密码,所以第一个解决方案是你的解决方案。制作一个对象如上所述,登录并通过调用传递它。