Android 在下一个活动中改装身份验证

Android 在下一个活动中改装身份验证,android,retrofit,http-token-authentication,Android,Retrofit,Http Token Authentication,我的第一个活动是登录活动,具有最简单的表单和硬编码凭证。POST请求被发送到API,结果返回令牌。一切正常。现在我实现它的方式是,我在登录方法的onClick事件中的onSuccess方法中放置了一个意图。代码如下: Login login = new Login("{hardcodedEmail}", "{hardcodedPassword}"); Call<User> call = userClient.login(login); call.enqueue(new Callbac

我的第一个活动是登录活动,具有最简单的表单和硬编码凭证。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();
   }
});
Login Login=new Login(“{hardcodedEmail}”,“{hardcodedPassword}”);
Call Call=userClient.login(login);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Toast.makeText(MainActivity.this,response.body().getToken(),Toast.LENGTH\u LONG.show();
字符串标记=response.body().getToken();
意向i=新意向(MainActivity.this、TestActivity.class);
星触觉(i);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(MainActivity.this,“错误:\n”+t.getMessage(),Toast.LENGTH\u LONG.show();
}
});
这段代码有一个简单的祝酒词,向我展示令牌并说一切正常。就是这样,我在这个页面上没有任何错误。但是在下一页,我试图从API中检索一些数据并显示它,但是我得到了错误401,或者未经授权的访问。这意味着我的证件没有留下


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

您可以通过
Intent
令牌字符串从
main活动
传递到
测试活动
。请随意尝试以下内容:

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

谢谢你的回答。当我获得令牌时,我在哪里传递它以进行身份验证?抱歉,我仍在学习改装。您必须检查您正在使用的API文档。我的猜测是,首先您发出登录调用以获取令牌,这是您在
userClient.login(login)中所做的。然后,无论何时发出
认证API调用
,都可能需要通过某种方式传递令牌,例如:将其设置为HTTP标头等。基于此,服务器能够区分真正的
登录用户和匿名用户。所以请看一看你的API文档。谢谢,我会检查它并报告回来。顺便说一句,如果你觉得我的答案很有帮助,你介意投票还是接受它作为答案?谢谢。我没有足够的代表投票支持你,但我把你的答案标记为解决方案。再次感谢。顺便说一句,所需要的只是将令牌作为授权头传递给客户端。
// 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

    ....
}