0

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

在下面的代码中,当我连接到 Wi-Fi 时,应用程序工作得非常好。当我没有连接到 wi-fi 时,“address=gps.getAddress();”行会发生一些事情 并发布变量pendingResponse 设置为false。我什至没有在控制台上得到第二个 log.d 的输出 (Log.d("Your Location",address);

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;     
}
4

1 回答 1

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 的引用)。

我的猜测是您的“getAddress”方法正在抛出 NullPointerException 或其他东西。

于 2013-08-04T18:43:44.270 回答