在接下来 activity 中改进身份验证

Retrofit authentication in the next activity

我的第一个 activity 是登录 activity,具有最简单的形式和用于此目的的硬编码凭据。 POST 请求发送到 API,结果返回令牌。一切正常。现在我实现它的方式是我在登录方法内的 onClick 事件的 onSuccess 方法中放置了一个意图。这是代码:

Login login = new Login("{hardcodedEmail}", "{hardcodedPassword}");
Call<User> call = userClient.login(login);
call.enqueue(new Callback<User>() {
    @Override
    public void onResponse(Call<User> call, Response<User> response) {
        Toast.makeText(MainActivity.this, response.body().getToken(), Toast.LENGTH_LONG).show();
        String token = response.body().getToken();
        Intent i = new Intent(MainActivity.this, TestActivity.class);
        startActivity(i);
   }

   @Override
   public void onFailure(Call<User> call, Throwable t) {
       Toast.makeText(MainActivity.this, "Error: \n" + t.getMessage(), Toast.LENGTH_LONG).show();
   }
});

这段代码有一个简单的祝酒词,向我展示令牌并表示一切正常。这样做了,我在此页面上没有收到任何错误。但在下一页上,我试图从 API 检索一些数据并显示它,但我收到错误 401,或未经授权的访问。这意味着我的凭据没有保留。

除了直接跳到下一个 activity 以保持凭据有效外,我还需要做其他事情吗?

您可以将 token string 通过 IntentMainActivity 传递到 TestActivity。随意试试这个:

call.enqueue(new Callback<User>() {
    @Override
    public void onResponse(Call<User> call, Response<User> response) {
        .....

        String token = response.body().getToken();
        Intent i = new Intent(MainActivity.this, TestActivity.class);

        // pass token string through Intent
        i.putExtra("TOKEN_STRING", token);

        startActivity(i);
   }

然后在TestActivity中,从Intent获取token传入:

// declare token as member variable
private String token;

@Override
public void onCreate(Bundle savedInstanceState) {
    .....

    Intent intent = getIntent();
    this.token = intent.getStringExtra("TOKEN_STRING");

    // you can do whatever you want with token later
    // eg: use token for authentication when issue next network call

    ....
}