Таким образом, я разрабатываю свое первое многопоточное приложение с помощью Android с классом AsyncTask. Я пытаюсь использовать его, чтобы исчерпать Геокодер во втором потоке, затем обновить UI с onPostExecute, но я продолжаю сталкиваться с проблемой с надлежащим Контекстом.
Я отчасти создавал помехи своему пути посредством использования Контекстов на основном потоке, но я не абсолютно уверен, что Контекст или как использовать его на фоновых потоках, и я не нашел хороших примеров на нем. Какая-либо справка? Вот выборка того, что я пытаюсь сделать:
public class GeoCode extends AsyncTask<GeoThread, Void, GeoThread> {
@Override
protected GeoThread doInBackground(GeoThread... i) {
List<Address> addresses = null;
Geocoder geoCode = null;
geoCode = new Geocoder(null); //Expects at minimum Geocoder(Context context);
addresses = geoCode.getFromLocation(GoldenHour.lat, GoldenHour.lng, 1);
}
}
Это продолжает перестать работать в шестой строке там из-за неподходящего Контекста.
Я провел еще несколько исследований, и кто-то предложил передать его в ветку (не знаю, почему я не подумал об этом). Я передал его потоку геокодера через аргумент, и все заработало.
Контекст - это объект, который предоставляет доступ в среду выполнения приложения. В большинстве случаев, когда вам нужно получить объекты из среды Android, такие как ресурсы, представления, классы инфраструктуры и т. Д., Вам необходимо иметь Context в ваших руках.
Получить экземпляр контекста очень просто, когда вы находитесь в классе Activity - Activity сама по себе является подклассом контекста, поэтому все, что вам нужно сделать, - это использовать ключевое слово this, чтобы указать на ваш текущий контекст. .
Когда бы вы ни создавали код, который может потребовать Context - вам следует позаботиться о том, чтобы передать объект Context из родительского Activity. В случае вашего примера вы можете добавить явный конструктор, который принимает контекст в качестве входного аргумента.