如何在不访问上下文的情况下从线程更新我的Android SQLite数据库?

布赖恩

我正在开发一个Android应用程序。应用程序启动时要做的第一件事之一就是启动侦听线程。该侦听线程为平板电脑上的另一个应用程序打开UDP套接字,并侦听该其他应用程序以发送数据。当我的侦听线程接收到数据时,我想将数据存储到SQLite数据库中,但是我无法弄清楚在不访问应用程序上下文的情况下该如何做。

我有一个数据库助手应用程序:

public class DatabaseHelper extends SQLiteOpenHelper {
    public DatabaseHelper(Context context){
        super(context, "myAppDatabase.db", null, 1);
    }

    @Override
    public void OnCreate(SQLiteDatabase db){
        db.execSQL("CREATE TABLE ...");
    }

    @Override
    public void OnUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        db.execSQL("DROP TABLE ...");
    }

    // my database CRUD queries
}

这个DatabaseHelper类是我在数据库上执行任何CRUD操作的唯一地方。

我从MainActivity启动线程:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState){
        ListenerClass myListenerClass = new ListenerClass();
        Thread listenerThread = new Thread(myListenerClass);
        listenerThread.setName("My Listener Thread");
        listenerThread.start();
    }
}

我有听众课:

public class ListenerClass implements Runnable {
    private volatile boolean run = true;
    private DataProcessingClass myDataProcessingClass;

    @Override
    public void run(){
        android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
        // Open UDP socket
        // Listen for data
        // Process the data
        myDatagramSocket.receive(myDatagramPacket);
        byte[] data = myDatagramPacket.getData();
        myDataProcessingClass = new DataProcessingClass();
        myDataProcessingClass.processData(data);
    }

    public void setRun(boolean run){
        this.run = run;
    }
}

当我的侦听器线程接收到数据时,它将调用另一个类来处理该数据,并将其存储到数据库中。在我尝试将其存储到数据库中之前,它一直有效,因为我无权访问应用程序的上下文。

有什么方法可以在不访问应用程序上下文的情况下写入SQLite数据库?如果没有,我该如何继续获取此数据库写入的上下文?

学徒

我通常使用的解决方案是添加一个采用的构造函数Context在这种特殊情况下,你需要这样的构造函数添加到这两个ListenerClassDataProcessingClassListenerClass构造将通过给定ContextDataProcessingClass构造。

另外,您可以DataProcessingClass(Context)像以前一样添加一个构造函数,但可以使用一个ListenerClass(DataProcessingClass)构造函数。这使其他人可以首先初始化DataProcessingClass对象,ListenerClass而不必担心如何初始化。同样,这使您可以更进一步,并使用依赖注入来初始化对象。(依赖注入可能是一个比该问题必要的主题更高级的话题。我只想提及它,以便您感兴趣的话可以进行进一步的研究。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQLite数据库在更新时挂起

来自分类Dev

Android SQLite MultiTable数据库开发

来自分类Dev

Android从.csv插入sqlite数据库

来自分类Dev

每次Entity Framework数据库迁移后如何访问上下文

来自分类Dev

如何在不使用存储库的情况下共享EntityFramework 6数据上下文?

来自分类Dev

加密sqlite数据库Android:

来自分类Dev

Android SQLite数据库重新导入

来自分类Dev

遍历android sqlite数据库

来自分类Dev

从本地访问插件的sqlite数据库

来自分类Dev

无法从Spark访问sqlite数据库

来自分类Dev

JavaScript函数访问SQLite数据库

来自分类Dev

如何在不违反依赖注入的情况下为单个数据库使用多个上下文

来自分类Dev

从SQlite数据库更新图像

来自分类Dev

SQLite 3数据库未更新

来自分类Dev

更新值sqlite数据库

来自分类Dev

更新大型SQLite数据库

来自分类Dev

从sqlite数据库android写入数据

来自分类Dev

从sqlite数据库访问数据

来自分类Dev

更新SQLite数据库

来自分类Dev

远程访问sqlite或mysql数据库

来自分类Dev

从本地访问插件的sqlite数据库

来自分类Dev

SQLIte不创建数据库表

来自分类Dev

SQLite数据库更新导致错误

来自分类Dev

批量更新大型sqlite数据库

来自分类Dev

SQLite数据库更新未发生

来自分类Dev

SQLite 数据库 - 更新查询

来自分类Dev

更新附加的 sqlite 数据库

来自分类Dev

我的 sqlite 数据库在哪里?

来自分类Dev

SQLite 数据库访问架构 Android