不在wifi上时AsyncTask响应不同

时间:2013-08-04 17:02:24

标签: android android-asynctask

我正在开发一个应用程序,它在后台基于监听器激活。 在应用程序中,我想捕获用户的当前位置(地址)并存储它。

在下面的代码中,当我连接到wi-fi时,应用程序工作正常。 当我没有连接到wi-fi时,在“address = gps.getAddress();”行中发生了一些事情。并发布变量pendingResponse设置为false。我甚至没有在控制台上获得第二个log.d的输出(Log.d(“你的位置”,地址);

getAddress是一个简单的函数,它使用纬度和经度来反转地理编码并获取地址。 我假设调用getAddress需要花费很长时间才能处理,因为当我没有使用wi-fi时,我的网络连接很慢,因此我陷入了这种情况。

有人可以指导我如何继续前进。

private class BgTask extends AsyncTask<String, Integer, String> {



@Override
protected void onPreExecute() {
   super.onPreExecute();
   gps = new GPSTracker(context);
}

@Override
protected String doInBackground(String... params) {
   String url=params[0];     

   // check GPS location
   if (gps.canGetLocation()) {
       Log.d("Your Location", "latitude:" + gps.getLatitude() + ", longitude: " + gps.getLongitude());
       address=gps.getAddress();
       Log.d("Your Location",address);
       responsePending=true;
   } else {        
       Log.d("Your Location"," Location Not Available");           
   }      

   return "All Done!";
}

@Override
protected void onProgressUpdate(Integer... values) {
   super.onProgressUpdate(values);       
}

@Override
protected void onPostExecute(String result) {
   super.onPostExecute(result);       
}

}

为getAddress函数添加代码

 public String getAddress(){
   String address="";

   // getting address with geocoder using reverse geocoding
   Geocoder gcd = new Geocoder(this, Locale.getDefault());
   try{
   List<Address> addresses = gcd.getFromLocation(getLatitude(), getLongitude(), 1);
   if (addresses.size() > 0)           
       address=addresses.get(0).getAddressLine(0)+addresses.get(0).getAddressLine(1);      
   }catch(IOException e){
       ;
   }       
   return address;     
}

1 个答案:

答案 0 :(得分:0)

调试这类问题的简便方法:

private String mAddress;
private Exception mException = null;

protected void doInBackground(Params... params) {
  try {
    // your stuff; e.g.:
    mAddress = getAddress();
  } catch (Exception e) {
    mException = e;
  }
}

protected void onPostExecute(Void unusedResult) {
  if (mException != null) {
    Log.e(TAG, String.format("Oops: %s", mException), mException);
    throw new RuntimeException(mException);
  }
  // your normal stuff
  ...
}

当异常发生时,程序将强制关闭,您将在logcat中获得完整的堆栈跟踪。

从AsyncTask检索异常信息的另一种不太方便的方法是调用AsyncTask.get()(不太方便,因为人们通常不会保存对新创建并执行的AsyncTask的引用)。 p>

我的猜测是你的“getAddress”方法抛出了NullPointerException等。