![](/img/trans.png)
[英]LocationListener error in android unable to get user location
[英]Android Error Writing Location Data to SQLite Database from LocationListener Class
我有一個應用程序,其中我有一個實現locationlistener的服務類。 我希望能夠將onLocationChanged()中收到的位置傳遞回我的主要活動。 到目前為止,我一直在嘗試通過寫入SQLite數據庫來實現這一點,但在嘗試打開數據庫時可能會出現錯誤。 我認為它與沒有寫上下文有關,但我無法弄明白。 但是,當我在onCreate()中執行此操作時,寫入數據庫的工作完全正常。 我最初只是嘗試這樣做:
@Override
public void onLocationChanged(Location loc) {//Spits out single location for current disconnect
System.out.println("location equals "+loc);
latitude=Double.toString(loc.getLatitude());
longitude=Double.toString(loc.getLongitude());
writeToDb(MyLocListener.this,latitude,longitude);
man.removeUpdates(listener);//Stops location manager from listening for updates
listener=null;
man=null;
}
public void writeToDb(Context context,String latitude,String longitude){
db=new DbAdapter(context);
db.openToWrite();
db.deleteAll();
db.insert(latitude);
db.insert(longitude);
db.close();
}
但這沒用,每次都會在db.openToWrite()行上給我一個nullPointerException。 getApplicationContext()在這里也不起作用。
我現在修改它以在一個線程中寫入DB:
@Override
public void onLocationChanged(Location loc) {//Spits out single location for current disconnect
System.out.println("location equals "+loc);
latitude=Double.toString(loc.getLatitude());
longitude=Double.toString(loc.getLongitude());
Runnable runner=new SaveLocation(latitude,longitude);
new Thread(runner).start();
man.removeUpdates(listener);//Stops location manager from listening for updates
listener=null;
man=null;
}
public class SaveLocation implements Runnable{
String latitude;
String longitude;
// DbAdapter db;
public SaveLocation(String latitude,String longitude){
this.latitude=latitude;
this.longitude=longitude;
}
@Override
public void run() {
db.openToWrite();
db.deleteAll();
db.insert(latitude);
db.insert(longitude);
db.close();
}
}
我在onCreate()方法中初始化數據庫為:
public class MyLocListener extends Service implements LocationListener{
static LocationManager man;
static LocationListener listener;
static Location location;
public DbAdapter db;
@Override
public void onCreate() {
super.onCreate();
this.db=new DbAdapter(MyLocListener.this);
}
但是現在,第二次嘗試一直給我一個更加精簡的錯誤,但它仍然在我試圖打開數據庫可寫的行上出錯。 行MyLocListener.java:92引用行db.openToWrite();
錯誤是:
05-30 15:35:19.698: W/dalvikvm(4557): threadid=9: thread exiting with uncaught exception (group=0x4001d7e0)
05-30 15:35:19.706: E/AndroidRuntime(4557): FATAL EXCEPTION: Thread-10
05-30 15:35:19.706: E/AndroidRuntime(4557): java.lang.NullPointerException
05-30 15:35:19.706: E/AndroidRuntime(4557): at com.phonehalo.proto.MyLocListener$SaveLocation.run(MyLocListener.java:92)
05-30 15:35:19.706: E/AndroidRuntime(4557): at java.lang.Thread.run(Thread.java:1096)
已解決---如果其他人遇到同樣的問題,我已經找到了解決方案,我無法相信它是多么簡單。 由於java的垃圾收集,我失去了鏈接到我的SqlDatabase。 解決方案只是將其聲明為靜態。 然后我可以在我的onLocationChanged()方法中使用Sql插入/寫入方法。 希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.