0

我的第一个活动是为此目的使用最简单的形式和硬编码凭据的登录活动。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,或未经授权的访问。这意味着我的凭据没有留下。

除了直接跳到下一个活动以保持凭据有效之外,我还需要做些什么吗?

4

1 回答 1

1

你可以token string通过Intent从你的MainActivityTestActivity。随意尝试这个:

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);
   }

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

// 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

    ....
}
于 2018-01-31T23:52:27.733 回答