尝试在空对象引用上调用接口方法'retrofit2.Call com.example.matagaruda.Api.Api.userLogin(String,String)'



我尝试通过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中的单例对象保持。

相关内容

最新更新