2017-04-22 55 views
0

我已經閱讀了很多關於單身人士在android.so中如何易受攻擊的博客。我的問題是如何在應用程序中維護這樣的全局對象或列表。我知道共享偏好是一種方式,但有什麼方法可以維護這樣的對象或有效地列出。任何幫助將更有幫助。管理全局對象或列表

+0

你應該提供一些關於這個問題的細節。您想做什麼?你已經做了什麼? – pouya

回答

1

您可以使用文件或SQLite數據庫在Android應用程序中保存數據。您可以查看以下鏈接,瞭解更多關於文件或SQLite數據庫保存數據:

將數據保存到一個文件是理想的存儲數據的長序列,其通常按順序閱讀 https://developer.android.com/training/basics/data-storage/files.html

將數據保存到數據庫中是理想的重複或結構化數據: https://developer.android.com/training/basics/data-storage/databases.html

0

如果你只是想保持一個列表,全球直到你的應用程序正在運行,然後創建一個新的類,讓我們說的「助手」和初始化聖atic在該類中的列表。現在,您可以通過「Helper.yourStaticListName」在應用程序的任何位置訪問該列表,您還可以在應用程序的任何位置添加/刪除或從列表中獲取數據。 但是,如果您想要在應用程序關閉時保留該列表,那麼有兩種解決方案。 首先在你的應用程序中創建一個本地數據庫「SQLite文件」,並添加/刪除或從中獲取數據。

檢查本教程:http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/

第二種解決方案是將數據轉換成JSON和JSON轉換成字符串,並將其保存在共享偏好。只要您需要它,只需從共享首選項獲取字符串並將其轉換爲JSON並解析即可獲取數據。 當你談論解析一個JSON時,最後一件事是「GSON庫」,這是一件好事。

這裏是鏈接:http://guides.codepath.com/android/leveraging-the-gson-library

希望這個答案會幫助你。

+0

@ Zohaib Hassan存儲在偏好是不是很好的做法? –

+0

這取決於你的要求。如果你想在單個設備中使用你的數據,並且需要這些數據,直到你的應用程序安裝在特定設備中,並且如果你的數據沒有佔用太多空間(就像String格式的Json佔用非常小的空間)那麼共享偏好是一個不錯的選擇。但請記住,存儲在「共享首選項」中的數據不安全,因爲其他應用可以在未經您許可的情況下輕鬆訪問和修改您的數據。 –

0

如何使用Android Service

您可以在應用程序啓動時(也可以在應用程序停止時停止它們)初始化/啓動它,然後在需要時(放入並獲取對象/列表)將它們啓動。

我相信這將是一種有效的方法。

+0

服務僅用於後臺操作,不用於存儲變量。 –

+0

@vipinagrahari儘管它可以用作存儲單身/共享首選項以外的對象的選項。你可以提出什麼建議? – Erwin

0

從具有靜態變量或服務定位器概念點很相似,具有單身。因此,如果意圖是避免全球狀態和後果,那麼將它們作爲替代品可能並不正確。

我們可以改變的Singleton類成的情況下,按照需要被實例化一次,並注入到組件和方法。我們可以手動使用的IoC框架來處理注入部分或做它用工廠模式來構造(我們可以限制只有一個實例的創建以及)的類的實例。這discussion thread提供了很多有關問題和各種選項的見解。

0

所以,如果我理解你的問題的權利,你需要一些全局變量存儲在你的應用程序,如果是如此,請看看this question

基本上你創建一個擴展應用程序,它會存儲任何你將一個類就像開始你的應用程序一樣,所有這些都可以通過應用程序訪問。

希望這有助於。

1

使用sharedPreferences,Sqlite數據庫來管理你的對象,單身不是很好,但靜態變量更難以維護,並且會使測試更加困難,你可以使用Shared首選項來維護一個全局狀態,如果數據不是很大,如果數據量很大,那麼建議使用sqlite。

共享偏好是非常容易使用,如果你有使用SQLite雖然你可以使用Android的
ORM庫問題,這裏有一個鏈接到一個:http://greenrobot.org/greendao/

0

如果你想創建一個全局訪問對象你應該問自己的第一件事是:爲什麼?爲什麼你需要一個全球可訪問的對象?大多數時候你都不會,而且你可以通過創建一個範圍有限的對象來繞過應用程序。

有些時候,你確實想要全球可訪問的資源,並且使用單例只是實現這一目標的一種方法。按照Android Docs您的數據存儲選項包括:

共享偏好

店專用的原始數據中的鍵值對。

內部存儲

Store上設備內存的私有數據。

外部存儲

存儲在共享外部存儲公共數據。

SQLite數據庫

存放在私有數據庫結構化數據。

用自己的網絡服務器在網絡上的網絡連接

存儲數據。

單身人士很棒,但是他們根據自己的實施方式有自己的風險。通常,開發人員在您試圖在應用程序內共享資源時使用此模式,例如Loggers,Print spoolers等。您可以使用多種方法在Java中創建Singletons,您可以使用Lazy Initialization或Static初始化,每個方法都有它們的自己的親/就「脆弱性」而言,單身人士是否線程安全,誰可以訪問它,等等都存在問題。這就是爲什麼試着理解你正在努力解決的問題是有道理的。就我個人而言,我不清楚你到底想要解決什麼問題,所以我不能詳細說明這會如何幫助或傷害你。我只能說,最大的漏洞也是最大的資產,就像大多數全局變量一樣,它可以隨時隨地訪問。單身人士是否是線程安全的也可能存在問題。

就我個人而言,我認爲您需要評估您嘗試解決的問題,並選擇合適的解決方案。也許使用單身是正確的解決方案,也許不是。但理解你所有的選擇和每個人的優勢/劣勢將是解決這個問題的最好方法。不幸的是,您沒有爲我或任何人提供足夠的背景給您一個可靠的建議。

0

管理全局對象的最好方法是根本沒有它們。根據我的經驗,在很多情況下,有替代選擇,而不是單身。有這麼好的解釋in this post

0

共享的偏好是好的,但有些時候你會感覺到問題的時候做一些修改,使一個POJO Java類的靜態常量變量和使用這個變量anywhere.because共享偏好使用後也不會改變價值或除非你修改.shared偏好檢索和存儲不是非常不友好。如果你使用常量,你可以很容易地修改。只有一個類你必須擊中