我正在开发一个应用程序,它在后台基于监听器激活。 在应用程序中,我想捕获用户的当前位置(地址)并存储它。
在下面的代码中,当我连接到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;
}
答案 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等。