2017-05-08 143 views
0

我已经创建了一个数据库,如下所示。cursor.moveToFirst()返回false

public class DataBase extends SQLiteOpenHelper { 
    private static String DB_NAME="MovieData"; 

    private static String TABLE_VARIABLES="data"; 

    private static int DB_VERSION=1; 
    DataBase(Context context) 
    {super(context,DB_NAME,null,DB_VERSION);//null is for cursors//sqlite helper classes constructor is being called 

    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { //Sqlitedatabase class gives us access to database 

     db.execSQL("CREATE TABLE "+TABLE_VARIABLES+"(" 
       +"_id INTEGER PRIMARY KEY AUTOINCREMENT," 
       + "Movie_Name TEXT," 
       + "Image_Link TEXT," 
       +"Release_Date TEXT," 

       + "Prediction TEXT);"); 
     insert_data(db,"Bahubali","https://www.desiretrees.in/wp-content/uploads/2016/12/Baahubali-2-Posters.jpg","2017/06/23","success"); 
     insert_data(db,"3 Idiots","http://s3.india.com/wp-content/uploads/2016/01/3-idiots-sequel-1.jpg","2018/06/11","success"); 
     insert_data(db,"Sagar","http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg","2019/07/17" ,"success"); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 
    private void insert_data(SQLiteDatabase db,String movie_name,String image_link,String release_date, String prediction){ 
     ContentValues 
       movie_data= new ContentValues(); 
     movie_data.put("Movie_Name",movie_name); 
     movie_data.put("Image_Link",image_link); 
     movie_data.put("Release_Date",release_date); 
     movie_data.put("Prediction",prediction); 
     db.insert("data",null,movie_data); 


    } 
} 

插入的数据仅用于测试。

我想的片段内访问数据基础。这部分片段的代码是

DataReceiver data= new DataReceiver(getContext()); 
      movie_name=data.getMovie_name(); 
      image_url=data.getImagelink(); 
      release_date=data.getRelease_date(); 
      prediction=data.getPrediction(); 

DataReceiver是一个从数据库接收数据的分离类。它的代码是。

public class DataReceiver { 

    private Context mContext; 
    private String movie_name,imagelink,release_date,prediction; 
    private String[] arrangedstring; 

    public DataReceiver(Context context) { 
     this.mContext=context; 
    } 

     public String[] getMovie_name(){ 
      SQLiteDatabase db= open(); 
      Cursor cursor = db.query("data", 
        new String[]{"_id", "Movie_Name"}, 
        null, 
        null, null, null, null 
      ); 
      String send[]= arrangeDescending(cursor,1); 
      cursor.close(); 
      return send; 
     } 
     public String[] getImagelink(){ 
      SQLiteDatabase db= open(); 
      Cursor cursor = db.query("data", 
        new String[]{"_id", "Image_Link"}, 
        null, 
        null, null, null, null 
      ); 
      String send[]= arrangeDescending(cursor,1); 

      cursor.close(); 
      return send; 
     } 
     public String[] getRelease_date(){ 

      SQLiteDatabase db= open(); 
      Cursor cursor = db.query("data", 
        new String[]{"_id","Release_Date"}, 
        null, 
        null, null, null, null 
      ); 
      String send[]= arrangeDescending(cursor,1); 

      cursor.close(); 
      return send; 
     } 
     public String[] getPrediction(){ 
      SQLiteDatabase db= open(); 
      Cursor cursor = db.query("data", 
        new String[]{"_id","Prediction"}, 
        null, 
        null, null, null, null 
      ); 

      String send[]= arrangeDescending(cursor,1); 
      cursor.close(); 
      return send; 
     } 

     private SQLiteDatabase open(){ 
      SQLiteOpenHelper DataBase = new DataBase(mContext); 
      SQLiteDatabase db = DataBase.getReadableDatabase(); 
      return db; 
     } 

     private String[] arrangeDescending(Cursor cursor,int column_no){ 
       if(cursor.moveToFirst()){ 
     int count=0; 
        do{ 
         arrangedstring[count]=cursor.getString(column_no); 
         arrangedstring=moveStringRight(arrangedstring); 
         count++; 

         cursor.moveToNext(); 
        }while(cursor.isAfterLast()); 
        arrangedstring=moveStringLeft(arrangedstring); 
       } 
      return arrangedstring; 
     } 

然后cursor.moveToFirst()方法返回false。我不知道我哪里出错了。

回答

1

如果cursor.moveToFirst()返回false,是因为你没有得到结果。

你的插入方法有错误,我相信你的表是空的。

你的表中有一个名为“上映时间”列,但在你的insert_data方法,你使用的是不正确的名称:

movie_data.put("Release Date",release_date); 

你缺少一个“_”

movie_data.put("Release_Date",release_date); 

这可能使插入查询失败,这就是为什么你没有得到结果。

编辑:虽然我不知道你想用你的查询来实现什么,但.query()方法有一个用于订购ASC或DESC结果的参数。所以,你可以删除你的排列方法。经柱“MOVIE_NAME”与方兴未艾为了您的查询之一

例子:

Cursor cursor = db.query("data", 
        new String[]{"_id", "Movie_Name"}, 
        null, 
        null, null, "Movie_Name ASC", null 
      ); 

检查文档: https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

+0

你也将有arrangeDescending方法的问题,请检查你的光标永远有2列{_id,x},当你尝试调用cursor.getString(2);将失败 – miibpa

+0

感谢注意到。修复“_”也没有帮助。仍然回避错误 –

+2

考虑到您的onCreate方法在SqliteOpenHelper中只会被调用一次。所以你的insert_data不会被重新调用。尝试再次卸载/启动您的应用程序或使用onUpdate方法。 – miibpa