簡體   English   中英

Android錯誤從LocationListener類將位置數據寫入SQLite數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM