【发布时间】:2016-05-11 20:59:14
【问题描述】:
我正在开发一个 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 数据库?如果没有,我该如何获取这个数据库写入的上下文?
【问题讨论】:
-
一种解决方案是添加一个构造函数,该构造函数接受要使用的上下文。您需要对所有需要上下文的类执行此操作,包括那些简单地将上下文传递给另一个类的类。
-
我也想过,但好像不是很干净。当然有一种方法可以更干净地做到这一点。
标签: java android multithreading sqlite