Для манипулирования базой данных я создал класс DBAdapter (), который расширяет SQLiteHelper ... у этого класса есть этот конструктор:
public DBAdapter(Context context) {
super(context, DATABASE_NAME, null, 1);
this.myContext = context;
}
Теперь он отлично работает в любой активности пакета:
DBAdapter db=new DBAdapter(this);
Я пытаюсь создать новый поток и получить доступ к базе данных из этого потока.
Проблема заключается в том, КОГДА я пытаюсь сделать
db=new DBAdapter(this);
внутри этого класса он говорит мне "неправильный контекст" !!!
Должен ли я создать новый конструктор в классе DBAdapter () для моего нового класса ???два конструктора в DBAdapter () ??
Вот так выглядит мой класс:
public class WorkerRunnable implements Runnable{
public WorkerRunnable(Socket clientSocket){
this.clientSocket=clientSocket;
}
public void run(){
try{
Scanner is =new Scanner(new DataInputStream(this.clientSocket.getInputStream()));
while (is.hasNext()) {
longitude = is.next();
Log.d("Longitudine:",longitude);
latitude=is.next();
Log.d("Latitudine:",latitude);
}
is.close();
clientSocket.close();
}
catch(IOException e){
e.printStackTrace();
}
}
}
Как должен выглядеть мой конструктор?Должен ли быть вызван метод run () этого класса? Thx!
public class Server1 extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.server1);
DBAdapter db=new DBAdapter(this);
MultiThreadedServer server = new MultiThreadedServer(6000);
new Thread(server).start();
}
}
Как я могу передать активность Server1 потоку ????
Вот MultiThreadedServerкакие классы для WorkerRunnable:
открытый класс MultiThreadedServer реализует Runnable {
protected int serverPort=6000;
public static String SERVERIP="10.0.2.15";
protected ServerSocket serverSocket=null;
protected boolean isStopped=false;
protected Thread runningThread=null;
public static int clientconnection = 0;
public MultiThreadedServer(int port){
this.serverPort=port;
}
public void run(){
synchronized(this){
this.runningThread = Thread.currentThread();
}
openServerSocket();
while(!isStopped()){
Socket clientSocket=null;
try{
System.out.println("Serverul asteapta clienti spre conectare");
clientSocket=this.serverSocket.accept();
clientconnection++;
System.out.println("Serverul a acceptat clientul cu numarul:"+clientconnection) ;
//Log.d("Server:","s-a acceptat un nou client");
}
catch(IOException e){
if(isStopped()) {
System.out.println("Server Stopped.") ;
return;
}
throw new RuntimeException(
"Error accepting client connection", e);
}
new Thread(new WorkerRunnable(clientSocket)).start();
}
System.out.println("Server Stopped.") ;
}
private synchronized boolean isStopped() {
return this.isStopped;
}
public synchronized void stop(){
this.isStopped = true;
try {
this.serverSocket.close();
} catch (IOException e) {
throw new RuntimeException("Error closing server", e);
}
}
private void openServerSocket() {
try {
InetSocketAddress serverAddr =new InetSocketAddress(SERVERIP,serverPort);
serverSocket = new ServerSocket();
serverSocket.bind(serverAddr);
Log.d("Server:","bind-ul a fost realizat!");
} catch (IOException e) {
throw new RuntimeException("Cannot open port 6000", e);
}
}
}