如何在android中存储令牌?

时间:2018-01-15 13:54:24

标签: android retrofit interceptor

我是Android开发的新手,我正在开发简单的移动应用程序,我通过使用Retrofit来调用登录服务。一旦我从登录服务获得响应(令牌),我应该如何在OkHttp拦截器中存储和使用该令牌。

提前致谢。

APIClient

package com.example.dell01.firstapplication.service;

import com.example.dell01.firstapplication.UserSession;

import java.io.IOException;

import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;    


public class APIClient {

    public static final String BASE_URL = "actual url";
    public static Retrofit retrofit = null;

    OkHttpClient okHttpClient = new OkHttpClient().newBuilder().addInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request originalRequest = chain.request();
            Request.Builder builder = originalRequest.newBuilder().header("Token", "token here");
            Request newRequest = builder.build();
            return chain.proceed(newRequest);
        }
    }).build();


    public static Retrofit getAPIClient(){
        if(retrofit == null){
            retrofit = new Retrofit
                    .Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create()).build();

        }

        return retrofit;
    }
}

APIInterface

package com.example.dell01.firstapplication.service;

import com.example.dell01.firstapplication.model.Token;

import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;   


public interface APIInterface {

    @POST("user/authenticate")
    @FormUrlEncoded
    Call<Token> getToken(@Field("username") String username, @Field("password") String password);
}

2 个答案:

答案 0 :(得分:2)

您可以使用 SharedPreferences

以下是完整的文档: SharedPreferences

示例:

保存:

 SharedPreferences preferences = getSharedPreferences("myPrefs", MODE_PRIVATE);
 preferences.edit().putString("token", hawkerauthToken).commit();

提取:

   String token = preferences.getString("token","");

答案 1 :(得分:0)

您应该将它们存储在共享首选项中。 默认情况下,共享首选项是私有的,除了您可以在将此令牌存储在共享首选项之前对其进行加密。