編輯:關於Android編程
什麼是token
token(令牌)是一串唯一的字符串,通常由服務端生成,在注冊完成時返回給客戶端,用來標識此用戶,客戶端將此字符串存儲在本地。在以後的網絡請求時,客戶端先查詢本地的token,如果有則直接使用此令牌進行網絡請求,沒有則提示未登錄,轉到登陸注冊界面。
此外,還可以在服務端或者客戶端添加過期判別機制。
token的作用
token可以顯著減少服務端對用戶表的查詢,同時使用戶不必每次都登陸,提高了系統的可用性與健壯性。
使用SharedPreferences保存token
獲取token並保存
NetWorks.regPost(user, password, email, tel, new Observer<User>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.e("LoginActivity",e.getLocalizedMessage()+"--"+e.getMessage());
}
@Override
public void onNext(User user) {
if(user.getmMessage().equals("success")){
MainActivity.instance.finish();//結束原來的主頁面
Toast.makeText(getApplicationContext(),"注冊成功",Toast.LENGTH_SHORT).show();
//token保存到本地
SharedPreferences sp = getSharedPreferences("loginToken", 0);
SharedPreferences.Editor editor = sp.edit();
editor.putString("userId",user.getmUserId());
editor.putString("userName",user.getmUserName());
editor.putString("phone",user.getmPhone());
editor.putString("email",user.getmEmail());
editor.putString("headImageUrl",user.getmHeadImageUrl());
editor.commit();
Intent i = new Intent(RegActivity.this,MainActivity.class);
startActivity(i);
finish();
}else{
Toast.makeText(getApplicationContext(),"注冊失敗"+user.getmMessage(),Toast.LENGTH_SHORT).show();
}
}
});
我使用的是retrofit框架進行網絡請求,上文是實現注冊功能的函數,在onNext()函數中獲取服務端返回的結果,這個框架自動把返回的json數據解析為對應的類對象(即上文中的user對象)。因為token的本質是唯一的字符串,userId滿足這個要求,因為userId是由服務端生成且唯一,故我將userId作為token使用。
進行網絡請求前查詢本地token
比如點擊側邊欄的頭像,如果未登錄則需要跳轉到登陸界面,已經登陸則進入個人信息界面。這時候,就需要查詢本地token進行判別。
private void initData() {
sp = getSharedPreferences("loginToken", 0);
name = sp.getString("userId", null);
userName = sp.getString("userName", null);
email = sp.getString("email", null);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.imageView:
if (name == null) {
Intent i = new Intent(MainActivity.this, LoginActivity.class);
startActivity(i);
} else {
Log.d("用戶ID", name);
Intent i = new Intent(MainActivity.this, PersonInfoActivity.class);
startActivity(i);
}
break;
}
}
備注
在此例中,我使用userId作為token,但並不建議這麼做,雖然這樣很簡單。因為userId顯然無法判別是否過期,如果我們需要實現token過期的判別,則可以采用將userId與日期拼接的方式。
此外,為了安全起見,不要在客戶端生成token。
以上所述是小編給大家介紹的Android使用token維持登陸狀態的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!
android中簽名、證書、公鑰密鑰的概念及使用
公鑰和私鑰的概念在現代密碼體制中加密和解密是采用不同的密鑰(公開密鑰),也就是公開密鑰算法(也叫非對稱算法、雙鑰算法)”,每個通信方均需要兩個密鑰,即公鑰和私
android clipRect Op.xxx各個參數理解
有點小啰嗦的一篇學習筆記,可以直接看最後得出的結論:前面的各種圖片和說明都是為最後的結論服務的 1)剪切:和平常畫圖工具剪切的作用一樣,在畫布上剪切一個區域,比如剪切一
android從init到開機動畫啟動關閉流程一簡易圖(surfaceflinger啟動的位置)
學習下,記錄下,分享下 init主進程啟動,解析init.rc後依次exec fork啟動相關的進程,其中以class main和core為首的service將會率
使用okhttp3做Android圖片框架Picasso的下載器和緩存器
最近項目裡把圖片加載框架從xUtils換到了Picasso,一些下載和緩存的策略也因此發生變化,Picasso的緩存沒有xUtils自動化那麼高,使用起來遇到了一些困難,