получить контекст в классе, который реализует Runnable - PullRequest
5 голосов
/ 29 мая 2011

У меня есть приложение на Android, которое в другом потоке от пользовательского интерфейса (который реализует Runnable)

Я получаю некоторые данные (данные GPS в виде широты и долготы) и из этих данных I

хочу выяснить правильный адрес, передав его геокодеру ..... после этого адрес, возвращенный геокодером, сохраню в базе данных:

Вот как я делаю эти вещи:

public class Client implemets Runnable{


public void run()
{

Geocoder myLocation=new Geocoder(getApllicationContext,Locale.getDefault());



}

}

но я получаю ошибку здесь:

Geocoder myLocation=new Geocoder(getApplicationContext,Locale.getDefault());

Runnable не знает, кто такой getApplicationContext ..... Я пробовал с «этим» вместо этого, но та же история.....

Теперь, какой правильный контекст нужно передать конструктору геокодера ????

Вот как выглядит конструктор геокодера:

Geocoder myLocation =new Geocoder(context,locale);

В своей деятельности я делаю это:

public class Server2 extends Activity {


public void onCreate(Bundle icicle) {


ClientThread_special client = new ClientThread_special(db);//here is where I start thread


        new Thread(client).start();
}


}

public class ClientThread_special implements Runnable {



 public ClientThread_special(DBAdapter db){

     this.db=db;
    }


 public void run() 

{

Geocoder myLocation=new Geocoder(getApllicationContext,Locale.getDefault());


}


}

Как мне изменить конструктор

public ClientThread_special(DBAdapter db){

     this.db=db;

    }

, чтобы иметь в моем Runnable контекстсервера2?

Ответы [ 2 ]

10 голосов
/ 29 мая 2011

Я думаю, ваш класс ClientThreadSpecial - это отдельный класс (не внутренний класс)? Если так, то почему бы вам не передать контекст из вызывающего Activity?

Если это внутренний класс, это даже проще. Предполагая, что ваш ClientThreadSpecial -класс является внутренним классом MyActivity -класса (который расширяет Activity), вы можете использовать что-то вроде этого:

Geocoder myLocation=new Geocoder(MyActivity.this,Locale.getDefault());
3 голосов
/ 29 мая 2011

Вы не можете использовать this, потому что this относится к Runnable. Поскольку Runnable определен в MyActivity (замените своим именем действия / службы), вы можете обратиться к MyActivity.this.

...