2017-04-16 54 views
-1

我是新手android世界,我有一個關於保存設置的問題。我會試着用一個例子來解釋它。我們假設我們有一個類似於gmail的android應用程序,用戶在該應用程序中同步一個帳戶。登錄/密碼在哪裏存儲,以便即使關閉手機,他們仍然在那裏?它們是否存儲在數據庫中的SharedPreferences中,單獨的文件中?任何解釋將不勝感激。何處在android中保存數據

回答

0

谷歌和其他這樣的公司使用會話來識別用戶。他們不會在您的手機中存儲密碼。首次登錄後,服務器將向用戶發出一個唯一的會話ID,應用可能會將其存儲在SharedPreferences中,然後,每個連續的服務器請求都必須發送此會話ID進行身份驗證。在你的情況下,你可以很好地存儲SharedPreferences中的任何設置,但不建議存儲密碼。如果您需要存儲大量數據,例如您正在創建具有各種功能的遊戲,則可以使用SQLite數據庫來存儲和檢索數據。

編輯: 首先,使用HttpUrlConnection發送用戶名和密碼到您的服務器。在此之後,我們需要從服務器響應頭中提取cookie。 下面的代碼演示瞭如何從服務器響應獲取的cookie:

   String[] tokens; 
       List cookies = conn.getHeaderFields().get("Set-Cookie"); 
       if (cookies != null) { 
        for (int i = 0; i < cookies.size(); i++) { 
         String cookieString = (String) cookies.get(i); 
         tokens = cookieString.split(";"); 
         List<String> cookieHeaders = new ArrayList<>(); 
         for (String str : tokens) { 
          if (str.contains("httponly")||str.contains("HttpOnly")) { 
           str = str.trim(); 
           cookieHeaders.add(str); 
          } else { 
           Log.d("loginactivity","str "+str); 
           str = str.substring(0, str.indexOf("=")).trim(); 
           cookieHeaders.add(str); 
          } 
         } 
         String token = cookieString; 
        } 
       } 

您可以把令牌共享偏好:

sharedPreferences.edit().putString("token", token).apply(); 

在此之後,添加餅乾任何連續的請求到服務器。

String cookie = sharedPreferences.getString("token",""); 
httpConn.setRequestProperty("Cookie",cookie); 
+0

我需要爲我的應用程序提供授權功能。我可以肯定地發送會話令牌給應用程序。你能否提供有關該主題的更多信息? – kDoyle

0

您可以保存SQLite數據庫上的數據。您的應用需要訪問文件系統權限。