我的进度对话有问题,我找不到我做错了什么。 当我按下Localize按钮时,我的代码执行新的AsyncTask和progressDialog启动,但最后它会停止并显示错误。我认为这个问题是因为它需要做的太长。错误是这样的:
执行doInBackground()
时出错我认为问题出在publishProgress()上,但我不知道如何以及在何处使用它。
这是我的代码:
public class GPSLocation extends AsyncTask<Void, Void, Void>
{
boolean running =true;
@Override
protected void onPreExecute()
{
super.onPreExecute();
pd = new ProgressDialog(Configuracion.this);
pd.setOnCancelListener(new DialogInterface.OnCancelListener(){
public void onCancel(DialogInterface dialog) {
pd.cancel();
}
});
longitude=0;
latitude =0;
getLonLat();
pd.setCancelable(true);
pd.setMessage("Getting GPS Location...");
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.show();
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
pd.setProgress(1);
// Things to be done while execution of long running operation is in progress. For example updating ProgessDialog
}
@Override
protected void onPostExecute(Void result)
{
pd.dismiss();
}
@Override
protected Void doInBackground(Void... params) {
boolean isDataSubmitted = false;
while(!isDataSubmitted)
{
if(longitude !=0 && latitude!=0)
{
isDataSubmitted = true;
Log.d("LONGITUD", ""+longitude);
Log.d("LATITUDE", ""+latitude);
longitud.setText(String.valueOf(longitude));
latitud.setText(String.valueOf(latitude));
}
}
return null;
}
}
这不在GPSLocation类中,而是从Localize.setOnclicklistener(this)调用;
@Override
public void onClick(View v){
if (v.getId() == R.id.localiza){
new GPSLocation().execute();
}
}
此方法:
public void getLonLat(){
LocationManager milocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener milocListener = new MiLocationListener();
if (milocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
milocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,milocListener);
}else if (milocManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
milocManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0, milocListener);
}
}
谢谢。
答案 0 :(得分:0)
不要在doInBackground()中使用方法.setText()
。这将导致错误。相反,您可以在onPostExecute()
将代码更改为
@Override
protected void onPostExecute(Void result)
{
pd.dismiss();
longitud.setText(String.valueOf(longitude));
latitud.setText(String.valueOf(latitude));
}
@Override
protected Void doInBackground(Void... params) {
boolean isDataSubmitted = false;
while(!isDataSubmitted)
{
if(longitude !=0 && latitude!=0)
{
isDataSubmitted = true;
Log.d("LONGITUD", ""+longitude);
Log.d("LATITUDE", ""+latitude);
}
}
return null;
}