我尝试通过WebService使用retrofit2登录。单击login
按钮时会出现错误。
错误是:java.lang.nullpoInterException:尝试调用接口方法'retrofit2.call com.example.matagaruda.api.api.api.userlogin(java.lang.string,java.lang.lang.lang.string(
retrofitclient
public class RetrofitClient {
private static Api api;
public RetrofitClient(String baseUrl){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
api = retrofit.create(Api.class);
}
public Api getService(){
return api;
}
}
接口
public interface Api {
@FormUrlEncoded
@POST("api/token/v1.0/getauthtoken")
Call<User> userLogin(@Field("username") String username, @Field("password") String password);
@POST("api/token/v1.0/getauthtoken")
Call<User> token(@Header("Authorization") String token);
}
活动登录
Api mApiService;
public void login() {
mApiService.userLogin(loginUsername.getText().toString(), loginPassword.getText().toString())
.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
Log.d(TAG, "onResponse: "+loginUsername.getText().toString()+loginPassword.getText().toString());
Log.d(TAG, "onResponse: "+response.body());
if (response.isSuccessful()) {
loading.dismiss();
try {
JSONObject jsonRESULTS = new JSONObject(response.body().toString());
if (jsonRESULTS.getString("error").equals("false")) {
Toast.makeText(mContext, "Berhasil Login", Toast.LENGTH_SHORT).show();
String nama = jsonRESULTS.getJSONObject("user").getString("nama");
Intent intent = new Intent(mContext, MainActivity.class);
intent.putExtra("result_nama", nama);
startActivity(intent);
} else {
String error_message = jsonRESULTS.getString("error_msg");
Toast.makeText(mContext, error_message, Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
loading.dismiss();
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
}
});
}
您需要初始化 mApiService
。更新您的登录方法:
public void login() {
if(mApiService==null)
mApiService = new RetrofitClient(baseUrl).getService();
mApiService.userLogin(loginUsername.getText().toString(), loginPassword.getText().toString())
.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
Log.d(TAG, "onResponse: "+loginUsername.getText().toString()+loginPassword.getText().toString());
Log.d(TAG, "onResponse: "+response.body());
if (response.isSuccessful()) {
loading.dismiss();
try {
JSONObject jsonRESULTS = new JSONObject(response.body().toString());
if (jsonRESULTS.getString("error").equals("false")) {
Toast.makeText(mContext, "Berhasil Login", Toast.LENGTH_SHORT).show();
String nama = jsonRESULTS.getJSONObject("user").getString("nama");
Intent intent = new Intent(mContext, MainActivity.class);
intent.putExtra("result_nama", nama);
startActivity(intent);
} else {
String error_message = jsonRESULTS.getString("error_msg");
Toast.makeText(mContext, error_message, Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
loading.dismiss();
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
}
});
}
您还应该考虑将RetrofitClient
作为RetrofitClient
中的单例对象保持。