#android #android-context #google-geocoder
#Android #android-context #google-геокодер
Вопрос:
У меня есть приложение на Android, которое находится в потоке, отличном от пользовательского интерфейса (который реализует Runnable)
Я получаю некоторые данные (данные GPS в виде широты и долготы), и из этих данных я
хочу узнать правильный адрес, передав его в геокодер ….. после этого адрес, возвращенный геокодером, я сохраняю его в базе данных:
Вот как я это делаю:
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????
Вот как выглядит конструктор Geocoder:
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 был контекст Server2?
Комментарии:
1. Почему вы используете поток? Google не рекомендует подобные вещи: developer.android.com/resources/articles /…
2. @Haphazard эта ссылка недоступна.
Ответ №1:
Я предполагаю, что ваш класс ClientThreadSpecial
является отдельным классом (не внутренним классом)? Если да, то почему вы не передаете контекст из своей вызывающей активности?
Если это внутренний класс, это еще проще. Предполагая, что ваш ClientThreadSpecial
-class является внутренним классом MyActivity
-class (который расширяет Activity), вы можете использовать что-то вроде этого:
Geocoder myLocation=new Geocoder(MyActivity.this,Locale.getDefault());
Комментарии:
1. Это не внутренний класс … и это было именно то, что я сделал … только потребовалось немного времени, пока я понял, как это сделать 🙂
Ответ №2:
Вы не можете использовать, this
потому this
что ссылается на Runnable. Поскольку Runnable определен в MyActivity (замените на ваше имя Activity / Service), вы можете обратиться к MyActivity.this
.