需要一个逻辑将数据存储到基元中并在没有SQLite的情况下将它们关联起来

时间:2016-03-08 09:58:17

标签: java android

我的应用使用WifiInfo类来获取已连接网络的Wifi SSID。

如果用户想要,它会存储在一个名为WifiList的ArrayList位置。

使用自定义名称,在另一个名为savedName的ArrayList中的相同位置。

现在,每当我打开应用程序时,它都会检查数组列表中是否存在Wifi SSID,并向我显示同一位置的特定自定义名称。

两个列表都通过TinyDB存储在共享首选项中。 这就是我在Android中存储数据的方式。使用sqlite数据库似乎没有意义用于这样简单的应用程序。

所以我现在需要的是一种在一个自定义名称下保存众多WiFi SSID的逻辑或方法。就像当我连接到WiFi A或WiFi B时,它必须显示“狗”和“狗”。和用于“猫”的WiFi C和E,F,G用于'小鼠'

如何存储这组数据以及我应该在哪里存储?

    package combined.locky;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.IBinder;
import android.widget.Toast;

import java.util.ArrayList;

public class LockyService extends Service
{
    //ANDROID VARIABLES
    public Context context;
    public static TinyDB tinyDB;
    public static WifiManager wifiManager;
    public static WifiInfo wifiInfo;

    //PROGRAM VARIABLES

    public static ArrayList<String> savedWifiList = new ArrayList<>(100);
    public static ArrayList<String> savedContextList = new ArrayList<>(100);

    @Override
    public void onCreate()
    {
        //CRITICAL INITIALISATION
        super.onCreate();
        context = getApplicationContext();
        tinyDB = new TinyDB(context);

        IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
        filter.addAction(Intent.ACTION_BOOT_COMPLETED);
        filter.addAction(Intent.ACTION_SCREEN_ON);
        LockyReceiver receiver = new LockyReceiver();
        registerReceiver(receiver, filter);

        //ANDROID INITIALISATION
        wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
        wifiInfo = wifiManager.getConnectionInfo();

        //FINALLY AFTER CREATING SERVICE
        Toast.makeText(context, "Locky Service Created", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onLowMemory()
    {
        tinyDB.putListString("savedWifiList", LockyService.savedWifiList);
        tinyDB.putListString("savedContextList", LockyService.savedContextList);
        super.onLowMemory();
    }

    @Override
    public void onDestroy()
    {
        tinyDB.putListString("savedWifiList", LockyService.savedWifiList);
        tinyDB.putListString("savedContextList", LockyService.savedContextList);
        Toast.makeText(context, "Locky Service Killed", Toast.LENGTH_SHORT).show();
        super.onDestroy();

    }

    @Override
    public IBinder onBind(Intent intent)
    {

        return null;
    }
}

这里是我使用arraylists的示例代码。我想将一个名称映射到不同的已保存的Wifi SSID。我不知道从哪里开始。

2 个答案:

答案 0 :(得分:0)

我没有弄清楚你的问题究竟是什么,所以请Clarey更多,以便为你提供特定的帮助,但根据我对你的理解问题:

您要存储的数据大小并不大,所以我认为共享首选项是最佳解决方案,您已经在使用它。

另一种解决方案是将您的数据存储在a file and read/write from it

如果您有复杂的关系数据,那么您应该使用SQLite。

如果您想使用NoSQL方法,还可以使用Realm简单高效的数据存储解决方案SnappyDB它是SQLite的替代方案。< / p>

但是对于少量键/值对数据共享首选项是最佳解决方案,您也可以使用TinyDB来简化对一行代码中对SharedPreferences的调用。

如果您的问题是如何从SharedPreferences中存储和检索ArrayList can check this question

答案 1 :(得分:-3)

如果要在本地存储数据,可以使用SQLite数据库。它适用于Android和iOS,易于存储和管理。