带有身份验证令牌的Rest API

时间:2018-06-28 14:48:21

标签: java android rest httpclient

我有一个使用身份验证令牌和以下代码调用Rest API的android应用程序

private void apiCall(){
    AsyncHttpClient client = new AsyncHttpClient();
    RequestParams param = new RequestParams();
    client.addHeader("IDENTITY_KEY",TOKEN);
    client.get(URL, param, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
             mTextMessage.setText(statusCode);
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
            mTextMessage.setText(statusCode+"");
        }
    });
}

问题是当我运行应用程序时,它返回0,为什么? 在方法外声明和初始化的URL和TOKEN。

1 个答案:

答案 0 :(得分:-1)

我建议您使用retrofit库来做到这一点。

比方说,您的URL基础是http://baseurl.com/api,您必须执行GET请求以通过电子邮件和密码登录/ login。我假设您的API将以JSON形式返回User对象。

Api.java

@GET("login")
Call<LoginResponse> verifyLogin(@Query("email") String email, @Query("password") String password);

需要执行API调用的地方,请执行以下操作

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://baseurl.com/api/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
Api api = retrofit.create(Api.class);
Call<LoginResponse> responseCall = api.verifyLogin("email","password");
    responseCall.enqueue(new Callback<ProductResponse>() {
        @Override
        public void onResponse(Call<ProductResponse> call, Response<ProductResponse> response) {
            if (response.isSuccessful()){
                //do whatever you need, 
            }
        }

        @Override
        public void onFailure(Call<ProductResponse> call, Throwable t) {

            Toast.makeText(context, "There was an error.", Toast.LENGTH_SHORT).show();
            Log.e("error",t.getMessage().toString());

        }
    });

注意:LoginResponse是POJO类。您必须制作一个POJO类来执行改装操作。很简单您可以从此处doc 1 doc 2

了解有关改造的更多信息