курсор не получает данные из базы данных sqlite - PullRequest
1 голос
/ 02 декабря 2011

Я столкнулся с проблемой в базе данных sqlite. На самом деле у меня есть 3 .java-файла и вспомогательный класс databse, в котором создается моя база данных, создаются таблицы для вставки и т. Д. Все функции CRUD, и я пытаюсь вызвать их из некоторого другого класса действия, но он не вызывает и не извлекает данные из Таблица. Вот мои файлы, пожалуйста, кто-нибудь может сказать мне, где я делаю ошибку.

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);
            }
            });}}

В этом классе я создал объект 'm' класса Databsehelper, который используется для вызова функции Insert_Recipe_Into_DB класса DatabaseHelper. До сих пор не проблема, если я удалю утверждения Intents сверху. Но если я вызываю другой класс активности после вызова функции вставки, он показывает ошибку «forceclose». следующий класс деятельности выглядит следующим образом:

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.

1 Ответ

0 голосов
/ 03 декабря 2011

Вам нужно открыть базу данных в операции, которую вы извлекаете, или вставлять данные в базу данных SQLite.Также обязательно закройте его, когда закончите.

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

В вашем onDestroy или паузе.Позвоните

m.close();

Это может быть проблемой, потому что я не вижу, где вы открываете свою базу данных в коде.

РЕДАКТИРОВАТЬ:

В вашем классе DatabaseHelper.Создайте метод.

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

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

Затем у вас будет метод для закрытия и открытия базы данных в ваших действиях, где вам нужно вставить и извлечь информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...