문제

나를 얻을려고 어느 책에서 데이터를 내 인벤토리 테이블에 기초한 ISBN.그러나 오류가 발생합니다:"시도를 다시 오픈 이미 닫 개체".오류 발생을 클릭하면 listView 체,이동하는 다른 화면으로 돌아 이 페이지를 통해서"마침()",그리고 다음을 클릭하십시오에는 또 다른 목록보 객체입니다.이동 String searchEntries[] = InventoryAdapter.getInventoryEntriesByISBN(searchQuery, isbn[position]);onClickListener 이전 루프onClickListener 그리고 지금 그것을 작동합니다.

왜 그것은 작동하지 않는 경우에도 getInventoryEntriesByISBN 으로 돌아온 후 이번 활동에서 다른 활동을 통해"완료()"?

오류가 발생에 SearchResultsScreen:

String searchEntries[] = InventoryAdapter.getInventoryEntriesByISBN(searchQuery, isbn[position]);

그리고 확장에서 발생 InventoryAdapter:

Cursor cursor = db.rawQuery(query, new String[] {ISBN});

SearchResultsScreen.java

// Set up search array
    for(int i = 0; i < isbn.length; i++)
    {
        searchArray.add(new InventoryItem(isbn[i], InventoryAdapter.getTitleAndAuthorByISBN(isbn[i])));
    }
    Toast.makeText(getApplicationContext(), "searchArray.size()="+searchArray.size(), Toast.LENGTH_LONG).show();

    // add data in custom adapter
    adapter = new CustomAdapter(this, R.layout.list, searchArray);
    ListView dataList = (ListView) findViewById(R.id.list);
    dataList.setAdapter(adapter);

    // On Click ========================================================
    dataList.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            String searchEntries[] = InventoryAdapter.getInventoryEntriesByISBN(searchQuery, isbn[position]);

InventoryAdapter.java (대부분의 관련 부분)

public String[] getInventoryEntriesByISBN(String search, String ISBN)
{
    String[] searchEntry = new String [9];
    //Query
    String query = "select * from INVENTORY where ISBN = ?";
    Cursor cursor = db.rawQuery(query, new String[] {ISBN});
    if(cursor.getCount()<1) // title Not Exist
    {
        cursor.close();
        for(int i = 0; i < 9; i++)
            searchEntry[i] = "Not Found";
        return searchEntry;
    }
    cursor.moveToFirst();

    //put data into respective variable
    int publish = cursor.getInt(cursor.getColumnIndex("PUBLISH_DATE"));
    String publishdate = ((Integer)publish).toString();
    String title = cursor.getString(cursor.getColumnIndex("TITLE"));
    String author = cursor.getString(cursor.getColumnIndex("AUTHOR"));
    String callNumber = cursor.getString(cursor.getColumnIndex("CALL_NUMBER"));
    int available = cursor.getInt(cursor.getColumnIndex("AVAILABLE_COUNT"));
    String availablecount = ((Integer)available).toString();
    int inventory = cursor.getInt(cursor.getColumnIndex("INVENTORY_COUNT"));
    String inventorycount = ((Integer)inventory).toString();
    int due = cursor.getInt(cursor.getColumnIndex("DUE_PERIOD"));
    String dueperiod = ((Integer)due).toString();
    int checkoutcount = cursor.getInt(cursor.getColumnIndex("COUNT"));
    String count = ((Integer)checkoutcount).toString();
    //combine variables into one array
    searchEntry[0] = ISBN;
    searchEntry[1] = title;
    searchEntry[2] = author;
    searchEntry[3] = publishdate;
    searchEntry[4] = callNumber;
    searchEntry[5] = availablecount;
    searchEntry[6] = inventorycount;
    searchEntry[7] = dueperiod;
    searchEntry[8] = count;

    cursor.close();
    return searchEntry;
}

public String getTitleAndAuthorByISBN(String ISBN)
    {
        int entriesFound = getNumSearchEntries(ISBN);
        if(entriesFound==0)
            entriesFound = 1;
        String searchEntry;
        //Query
        String query = "select * from INVENTORY where ISBN = ?";
        Cursor cursor = db.rawQuery(query, new String[] {ISBN});
        if(cursor.getCount()<1) // title Not Exist
        {
            cursor.close();
            searchEntry = "Not Found";
            return searchEntry;
        }
        cursor.moveToFirst();
        //put data into respective variable
        String title = cursor.getString(cursor.getColumnIndex("TITLE"));
        String author = cursor.getString(cursor.getColumnIndex("AUTHOR"));
        //combine variables into one String
        searchEntry = title + " / " + author;
        //close cursor and return
        cursor.close();
        return searchEntry;
    }

DataBaseHelper.java

public class DataBaseHelper extends SQLiteOpenHelper
{   
// Database Version
    private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "database.db";

// ============================ End Variables ===========================

public DataBaseHelper(Context context, String name, CursorFactory factory, int version) 
{
           super(context, name, factory, version);
}

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

// Called when no database exists in disk and the helper class needs
// to create a new one.
@Override
public void onCreate(SQLiteDatabase _db) 
{
        _db.execSQL(LoginDataBaseAdapter.USER_TABLE_CREATE);
        _db.execSQL(CheckOutDataBaseAdapter.CHECKOUT_TABLE_CREATE);
        _db.execSQL(InventoryAdapter.INVENTORY_TABLE_CREATE);
        _db.execSQL(StatisticsAdapter.STATISTICS_TABLE_CREATE);
}
// Called when there is a database version mismatch meaning that the version
// of the database on disk needs to be upgraded to the current version.
@Override
public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) 
{
        // Log the version upgrade.
        Log.w("TaskDBAdapter", "Upgrading from version " +_oldVersion + " to " +_newVersion + ", which will destroy all old data");


        // Upgrade the existing database to conform to the new version. Multiple
        // previous versions can be handled by comparing _oldVersion and _newVersion
        // values.
        // on upgrade drop older tables
        _db.execSQL("DROP TABLE IF EXISTS " + LoginDataBaseAdapter.USER_TABLE_CREATE);
        _db.execSQL("DROP TABLE IF EXISTS " + CheckOutDataBaseAdapter.CHECKOUT_TABLE_CREATE);
        _db.execSQL("DROP TABLE IF EXISTS " + InventoryAdapter.INVENTORY_TABLE_CREATE);
        _db.execSQL("DROP TABLE IF EXISTS " + StatisticsAdapter.STATISTICS_TABLE_CREATE);

        // Create a new one.
        onCreate(_db);
}

}
도움이 되었습니까?

해결책 2

항목을 클릭 할 때만 오류가 발생하고 다른 화면으로 이동하여 "finish ()"를 통해이 페이지로 돌아가서 다른 ListView 개체를 클릭하십시오.

문자열 searchentRies []= InventoryAdapter.getInvenToryEntriesByISBN (SearchQuery, ISBN [위치]);OnClickListener에서 이전 루프와 루프를 루프로 이전으로 작동합니다.

올바른 searchResultsScreen은 다음과 같습니다.

searchResultsScreen.java

// Set up search array
    final String Entries[][] = new String[isbn.length][9];
    for(int i = 0; i < isbn.length; i++)
    {
        searchArray.add(new InventoryItem(isbn[i], InventoryAdapter.getTitleAndAuthorByISBN(isbn[i])));
        Entries[i] = InventoryAdapter.getInventoryEntriesByISBN(searchQuery, isbn[i]);
    }
    Toast.makeText(getApplicationContext(), "searchArray.size()="+searchArray.size(), Toast.LENGTH_LONG).show();

    // add data in custom adapter
    adapter = new CustomAdapter(this, R.layout.list, searchArray);
    ListView dataList = (ListView) findViewById(R.id.list);
    dataList.setAdapter(adapter);

    // On Click ========================================================
    dataList.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            String searchEntries[] = Entries[position];
.

다른 팁

쿼리를 실행하기 전에 데이터베이스 연결 확인 :

if (!dbHelper.db.isOpen()) dbHelper.open();

cursor.requery();를 사용하여 동일한 쿼리를 다시 사용할 수도 있습니다.

및 마지막으로 커서와 데이터베이스도 닫아야합니다.

cursor.close();
db.close();
.

편집 :

DBHelper를 확장하는 SQLiteOpenHelper 클래스를 만들었습니다.이 클래스는 내부 클래스의 DatabaseHelper 클래스이고 해당 클래스는 다음과 같습니다.

/** For OPEN database **/
public synchronized DatabaseHelper open() throws SQLiteException {
    dbHelper = new DBHelper(context);
    db = dbHelper.getWritableDatabase();
    return this;
}

/** For CLOSE database **/
public void close() {
    dbHelper.close();
}
.

아직 의심이 있으시면 언제든지 저를 핑 해주십시오.고맙습니다.

이 문제입니다

    if(cursor.getCount()<1) // title Not Exist
    {
        cursor.close(); 
        for(int i = 0; i < 9; i++)
            searchEntry[i] = "Not Found";
        return searchEntry;
    }
    cursor.moveToFirst();
    cursor.close();
.

로 변경됩니다
  for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
  {
            String title = cursor.getString(cursor.getColumnIndex("TITLE"));
            String author = cursor.getString(cursor.getColumnIndex("AUTHOR"));
            //combine variables into one String
            searchEntry = title + " / " + author;
  } 
.

public String[] getInventoryEntriesByISBN(String search, String ISBN)
{
    String[] searchEntry = new String [9];
    //Query
    String query = "select * from INVENTORY where ISBN = ?";
    Cursor cursor = db.rawQuery(query, new String[] {ISBN});

추가 SQLiteDatabase db = this.getWritableDatabase(); 이 코드에서 실행하기 전에 원 쿼리

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top