我正在开发一个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
。在这种特殊情况下,你需要这样的构造函数添加到这两个ListenerClass
和DataProcessingClass
。该ListenerClass
构造将通过给定Context
的DataProcessingClass
构造。
另外,您可以DataProcessingClass(Context)
像以前一样添加一个构造函数,但可以使用一个ListenerClass(DataProcessingClass)
构造函数。这使其他人可以首先初始化DataProcessingClass
对象,ListenerClass
而不必担心如何初始化。同样,这使您可以更进一步,并使用依赖注入来初始化对象。(依赖注入可能是一个比该问题必要的主题更高级的话题。我只想提及它,以便您感兴趣的话可以进行进一步的研究。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句