Я использую код, предоставленный Fedor, в следующей ссылке, чтобы получить широту и долготу из моего простого демонстрационного приложения. Я пытаюсь получить широту и долготу, используя класс MyLocation, предоставленный им в этой ссылке.Продвинутый диалог увольняется до завершения потока - Android
What is the simplest and most robust way to get the user's current location on Android?
Я стараюсь принести широту и долготу на кнопку мыши. При нажатии кнопки я запускаю задачу асинхронной передачи и делегирую работу по извлечению местоположения в фоновом режиме моей асинтезы.
pre execute - progressdialog начато. post execute - диалог прогресса отклонен.
Вот как должен работать диалог прогресса в моем коде, и вот проблема, которая у меня есть. Диалог хода выполнения инициируется правильно, но даже до того, как широта и долгота будут напечатаны в методе doinbackground, диалог прогресса будет отклонен.
Я не понимаю, почему это происходит.
Вот мой передний конец деятельности
public class LocationServices extends Activity {
MyLocation myLocation = new MyLocation();
LocationResult locationResult;
TextView tv1, tv2;
Location location;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv1 = (TextView) findViewById(R.id.tv1);
tv2 = (TextView) findViewById(R.id.tv2);
Button btn = (Button) findViewById(R.id.Button01);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new LocationAsyncTasking().execute();
}
});
}
public class LocationAsyncTasking extends AsyncTask<String, Void, Void> {
ProgressDialog dialog;
int totalAvail;
protected void onPreExecute() {
// this.dialog.setMessage("Inserting data...");
dialog = new ProgressDialog(LocationServices.this);
this.dialog.setMessage("Fetching data...");
this.dialog.show();
}
protected Void doInBackground(String... args) {
Looper.prepare();
locationResult = new LocationResult() {
public void gotLocation(Location location) {
// TODO Auto-generated method stub
// LocationServices.this.location = location;
System.out.println("Progress dialog should be present now - latitude"+location.getLatitude());
System.out.println("Progress dialog should be present now - longitude"+location.getLongitude());
}
};
myLocation.getLocation(LocationServices.this, locationResult);
return (null);
}
protected void onProgressUpdate(Integer... progress) {
}
protected void onPostExecute(Void unused) {
dialog.dismiss();
}
}
}
Я очень озадачен, думая о том, что делает этот диалог прогресса исчезнет еще до того, СОП в doinbackground закончена.
Эксперты, пожалуйста, помогите мне понять и решить эту проблему.
Любая помощь в этом отношении приветствуется.
Глядя вперед, С наилучшими пожеланиями, Рони
Извините, я не вижу способа добавить код здесь, поэтому я вставляю его здесь напрямую. – user264953
final MyLocation myLocation = new MyLocation(); \t \t окончательный LocationResult locationResult = новый LocationResult() { \t \t \t \t \t \t @Override \t \t \t общественного недействительными gotLocation (Место нахождения) { \t \t \t \t // TODO Auto-генерироваться метод заглушки \t \t \t \t \t \t \t} \t \t}; \t \t \t \t btn.setOnClickListener (новый OnClickListener() { \t \t \t @Override \t \t \t общественного недействительными OnClick (View V) { \t \t \t \t myLocation.getLocation (LocationServices.this, locationResult); \t \t \t \t tv1.setText ("широта"); // необходимо добавить широту, я получаю здесь \t \t \t \t tv2.setText ("долгота"); // нужно добавить долготу я сюда \t \t \t} \t \t}); – user264953
Я сделал согласно вашему предложению, но как я могу получить loc.getlat() и loc.getlon(), чтобы установить значения в textview, которые у меня есть ... также, перед установкой этих значений, я не хочу, чтобы пользователь для выполнения каких-либо других действий внутри деятельности..так, чтобы заблокировать его от этого и отобразить другие компоненты в фоновом режиме, в то время как lat, long is fetched, я должен использовать spinner, rt? – user264953