2011-12-02 194 views
1

我在sqlite数据库中遇到问题。其实我有3个.java文件和一个数据库帮助类,其中我的数据库创建,表创建插入等所有CRUD函数,我试图从其他一些活动类调用它们,但它不会调用,也不会从中检索数据表。这里是我的文件,请任何人都可以告诉我我犯了什么错误。游标没有从sqlite数据库中检索数据

MainActivity.java

package mad.project; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 


public class MainActivity extends Activity { 

    @Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    DatabaseHelper m = new DatabaseHelper(this); 
    m.onCreate(); 

    Button menubutton4 = (Button) findViewById(R.id.InsertRecipeButton); 

menubutton4.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View argo) { 

    Intent intent4 = new Intent(MainActivity.this, TryActivity.class); 
    startActivity(intent4); 
} 
}); 
} 
} 

当我按一下按钮,我们将达到TryActivity类如下:

package mad.project; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class TryActivity extends Activity{ 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.insertrecipe); 
    final DatabaseHelper m = new DatabaseHelper(this); 
       final EditText RecipeBox = (EditText) findViewById(R.id.RecipeBox); 
     Button submit_button = (Button) findViewById(R.id.SubmitRecipe); 

     submit_button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
     String a=RecipeBox.getText().toString(); 
     m.Insert_Recipe_Into_DB(a); 
     Intent intent23 = new Intent(TryActivity.this,RoughActivity.class); 
       startActivity(intent23); 
      } 
      });}} 

在这个类中,我创建Databsehelper的对象“M”用于调用DatabaseHelper类的Insert_Recipe_Into_DB函数的类。现在,如果我从上面删除Intents语句,现在没有问题。但是如果我在调用插入函数后调用另一个活动类,它将显示“forcesclose”错误。接下来的活动类如下:

RoughActivity.java

package mad.project; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
public class RoughActivity extends Activity{ 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
      final DatabaseHelper m = new DatabaseHelper(this); 
      String [] rec ; 
      rec=m.get_recipe(); 
       int rec_len = rec.length; 
       String [] todaymenu = new String[rec_len]; 
       for(int i = 1;i<=rec_len;i++) 
       { 
        todaymenu[i]=rec[i-1]; 
       } 
    this.setListAdapter(newArrayAdapter<String>(RoughActivity.this, 
     R.layout.todays_menu_view,R.id.Today,rec)); 
       } 

private void setListAdapter(ArrayAdapter<String> arrayAdapter) { 
    // TODO Auto-generated method stub 
    } 
    } 

DatabaseHelper.java

package mad.project; 

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

public class DatabaseHelper extends SQLiteOpenHelper{ 

static final String dbName="CookBookDatabase"; 

public DatabaseHelper(Context context) 
{ 
    super(context, dbName, null, 33); 
    // TODO Auto-generated constructor stub 
} 
static final String Try_Table= "Try_Table"; 
static final String Recipe= "Recipe"; 

public void onCreate() {   
execSQL("CREATE TABLE "+Try_Table+" ("+ Recipe + " VARCHAR) "); 
} 

private void execSQL(String string) { 
    // TODO Auto-generated method stub 
    } 

public void Insert_Recipe_Into_DB(String a) 
{ 
    SQLiteDatabase db= this.getWritableDatabase(); 
    ContentValues cv=new ContentValues(); 
    cv.put(Recipe, a); 
db.insert(Try_Table, Recipe, cv); 
db.close(); 
} 

String[] get_recipe() 
{ 
    String [] recipe = null; 
    SQLiteDatabase db=this.getReadableDatabase(); 

    Cursor count =db.rawQuery("SELECT COUNT(*) FROM "+Try_Table, null); 

    count.moveToFirst(); 
    if(count.getInt(0) == 0) 
    { 
     db.close(); 
     return recipe; 
    } 
    if(count.getInt(0)!= 0) 
    { 

    Cursor cur=db.rawQuery("SELECT * FROM "+Try_Table, null); 

    int br_count =cur.getCount(); 
    if(br_count != 0) 
    { 
     int i=0, index; 
     recipe= new String[br_count]; 
     cur.moveToFirst(); 
     do { 
      index=cur.getColumnIndex(Recipe); 
      recipe[i++]=cur.getString(index); 

     }while(cur.moveToNext()); 
    } 
    } 


    db.close(); 
    return recipe; 
} 


@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void onCreate(SQLiteDatabase arg0) { 
    // TODO Auto-generated method stub 

} 
} 

请告诉我,我在哪里犯错是否在DatabaseHelper类或RoughActivity类。

回答

0

您需要在您检索的活动中打开数据库或将数据插入到SQLite数据库中。也请确保在完成后关闭它。

final DatabaseHelper m = new DatabaseHelper(this); 
m.open(); 

在您的onDestroy或暂停。 呼叫

m.close(); 

这可能是问题,因为我没有看到,你在代码中打开数据库。

编辑:

在你的DatabaseHelper类。创建一个方法。

public void open(){ 
db.open(); 
} 

public void close(){ 
db.close() 
} 

然后,您将有方法在您需要插入和检索信息的活动中关闭和打开数据库。

+0

这是打开数据库的正确方法吗? – mehwish

+0

看看我的编辑。 –

+0

这似乎是可能的问题。当你试图访问数据库时,它的FC的 –