强制关闭在光标所在行!光标、在行

由网友(向人间撒糖)分享简介:海兰!我试图创建一个将查找存储在SQLite数据库GPS数据的应用程序。但我现在面临一个问题:我建立创建我的数据库,现在我从另一个类试图让一个光标放在我所有的数据,使用此功能的DbAdapter类:Hy!I'm trying to create an application that looks for gp...

海兰! 我试图创建一个将查找存储在SQLite数据库GPS数据的应用程序。 但我现在面临一个问题: 我建立创建我的数据库,现在我从另一个类试图让一个光标放在我所有的数据,使用此功能的DbAdapter类:

Hy! I'm trying to create an application that looks for gps data that was stored in SQlite database. But I'm facing a problem: I built an DbAdapter class that creates my database and now I'm trying from another class to get an cursor over my all data,using this function:

public Cursor fetchAllData() {

        return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_LONGITUDE,KEY_LATITUDE,KEY_COUNTRY,KEY_TOWN,KEY_STREET}, null, null, null, null, null);
    }

现在,我要创建DbAdapter在我的新的类的实例,但我得到forceclose当我插入此行:光标C = db.fetchAllData();

Now,I'm creating an instance of DbAdapter in my new class,but I get forceclose when I insert this line:Cursor c=db.fetchAllData();

创建我的数据库类看起来是这样的:

The class that creates my database looks like this:

package test.android;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class CoordonateDbAdapter {


    public static final String KEY_ROWID = "_id";
    public static final String KEY_LONGITUDE= "longitude";
    public static final String KEY_LATITUDE = "latitude";
    public static final String KEY_COUNTRY= "country";
    public static final String KEY_TOWN= "town";
    public static final String KEY_STREET = "street";

    private static final String TAG = "CoordonateDbAdapter";
    private DatabaseHelper mDbHelper;
    private SQLiteDatabase mDb;

    private static final String DATABASE_CREATE =
            "create table car1 (_id integer primary key autoincrement, "
                    + "longitude text not null, latitude text not null," +
                   "country text not null,town text not null,street text not null);";

    private static final String DATABASE_NAME = "gps";
    private static final String DATABASE_TABLE = "masini";
    private static final int DATABASE_VERSION = 1;

    private final Context mCtx;

    private static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {

            db.execSQL(DATABASE_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS notes");
            onCreate(db);
        }
    }
    public CoordonateDbAdapter(Context ctx) {
        this.mCtx = ctx;
    }
    public CoordonateDbAdapter open() throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        mDbHelper.close();
    }
    public long insertData(String longitude, String latitude, String country, String town, String street) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_LONGITUDE, longitude);
        initialValues.put(KEY_LATITUDE, latitude);
        initialValues.put(KEY_COUNTRY, country);
        initialValues.put(KEY_TOWN, town);
        initialValues.put(KEY_STREET, street);

        return mDb.insert(DATABASE_TABLE, null, initialValues);
    }
    public boolean deleteData(long rowId) {

        return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
    }
   public Cursor fetchAllData() {

        return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_LONGITUDE,KEY_LATITUDE,KEY_COUNTRY,KEY_TOWN,KEY_STREET}, null, null, null, null, null);
    }
    public Cursor fetchData(long rowId) throws SQLException {

        Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] 
                    {KEY_ROWID, KEY_LONGITUDE,KEY_LATITUDE,KEY_COUNTRY,KEY_TOWN,KEY_STREET}, 
                     KEY_ROWID + "=" + rowId, null, null, null, null, null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
    }
    public boolean updateNote(long rowId, String longitude, String latitude,String country, String town,String street) {
        ContentValues args = new ContentValues();
        args.put(KEY_LONGITUDE, longitude);
        args.put(KEY_LATITUDE, latitude);
        args.put(KEY_COUNTRY, country);
        args.put(KEY_TOWN, town);
        args.put(KEY_STREET, street);

        return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
    }

    public List<String> selectAll() {

       List<String> list = new ArrayList<String>();
       Cursor cursor = this.mDb.query(DATABASE_TABLE, new String[] { "longitude"},

         null, null, null, null, "name desc");

       if (cursor.moveToFirst()) {

          do {

             list.add(cursor.getString(0));

          } while (cursor.moveToNext());

       }
       if (cursor != null && !cursor.isClosed()) {

          cursor.close();

       }

       return list;

    }
}

和检索的GPS数据的类是这样的:

And the class that retrieves the gps data is like this:

package test.android;

import java.util.List;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.Toast;
public class screen_database extends Activity{

      public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.screen_database);
           CoordonateDbAdapter db = new CoordonateDbAdapter(this); 
          db.open();
          long id;
      //    id= db.insertData("-36.2", "125","Romania","Cluj","Zorilor");
      //    db.insertData("44", "55","Romania","Iasi","Alexandru Ioan Cuza");
       //   List<String> names = db.selectAll();
           Cursor c=db.fetchAllData();

         /*  if (c.moveToFirst())
            {
                do {          
                  //  DisplayTitle(c);
                } while (c.moveToNext());
            }*/
         //   c.close();

        }

      /*  public void DisplayTitle(Cursor c)
        {
            Toast.makeText(this, 
                    "longitude: " + c.getString(0) + "n" +
                    "latitude: " + c.getString(1) + "n" +
                    "country: " + c.getString(2) + "n" +
                    "town:  " + c.getString(3),
                    Toast.LENGTH_LONG).show();        
        }*/ 
}
//}

您可以看到很多行是注释,因为我得到的时候我问了一个游标强制关闭的,所以我试图保持它的简单。 我是否需要任何权限使用游标工作,监守我看着在互联网上,所有的行code看起来像我这样的? 另一个问题是,我的应用程序是相当大的,而且我accesing这个类其他类别....类的一长排,直到我从SQLite的查询。 我真的是preciate,如果你能帮助我,这可能是简单的东西,但我无法弄清楚什么is.Thank你!

You can see lots of lines that are comments because I get force close when I'm asking for a Cursor,so I tried to keep it as simple. Do I need any permissions to work with cursors,becuase I looked on the internet and all the line code looks like mine?! Another problem is that my application is quite big,and I'm accesing this classes from other classes....a long row of classes until I get to query from the Sqlite. I would really apreciate if you would help me,it might be something simple but I can't figure it out what it is.Thank you!!!

推荐答案

第一次尝试直接复制到访问

first try to access directly by copying

    return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_LONGITUDE,KEY_LATITUDE,KEY_COUNTRY,KEY_TOWN,KEY_STREET}, null, null, null, null, null);

而不是通过方法调用它

。 如果这样的作品,检查是否光标在可用的方法。 如果是,尽量减少像

instead of calling it by method. If that works, check if curser is available in the method. If it is, try to reduce the SQLQuery like

    return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_LONGITUDE}, null, null, null, null, null);

和添加更多的列一步一步来。

and add more columns step by step.

阅读全文

相关推荐

最新文章