0

내가 작업하는 CursorLoader을 만들어 한 내 Contentprovider (제공자를 보려면 클릭)하지만 난안드로이드 SQLiteException : 그런 테이블 오류

"방법 swapCursor (커서)를 위해 정의되지 않은 swapCursor 오류를 수신하고 유형 CursorAdapter "changeCursor에

변경된 SwapCursor 오류를 제거합니다.

새 오류가 로더 또는 공급자가 sqlite 데이터를 가져 오는 중입니다. logcat을 참조하십시오

어떤 도움을 주시면 대단히 감사하겠습니다.

로그 캣 :

03-10 10:35:02.788: E/AndroidRuntime(1318): FATAL EXCEPTION: ModernAsyncTask #1 
03-10 10:35:02.788: E/AndroidRuntime(1318): java.lang.RuntimeException: An error occured while executing doInBackground() 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:137) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at java.lang.Thread.run(Thread.java:856) 
03-10 10:35:02.788: E/AndroidRuntime(1318): Caused by: android.database.sqlite.SQLiteException: no such table: _id: , while compiling: SELECT sName, wUrl, uName, pWord, lNotes FROM _id 


03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:127) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:94) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:53) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:354) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:291) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at com.loginplus.home.ListProvider.query(ListProvider.java:61) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.content.ContentProvider$Transport.query(ContentProvider.java:178) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.content.ContentResolver.query(ContentResolver.java:310) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:49) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:35) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:240) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:51) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:40) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:123) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
03-10 10:35:02.788: E/AndroidRuntime(1318):  ... 4 more 

로더 활동

public class LoginList extends FragmentActivity implements OnClickListener, OnItemClickListener, LoaderManager.LoaderCallbacks<Cursor> { 

private ListView loginList; 
private Button webLogin; 
private CursorAdapter adapter ; 
private static final int LOADER_ID = 02; 

private ArrayList<LoginDetails> loginArrayList; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

setContentView(R.layout.login_listview); 
getSupportLoaderManager().initLoader(LOADER_ID, null, this); 

String[] from = { dataStore.COLUMN_NAME_SITE, dataStore.COLUMN_NAME_ADDRESS, dataStore.COLUMN_NAME_USERNAME, dataStore.COLUMN_NAME_PASSWORD, dataStore.COLUMN_NAME_NOTES}; 
int[] to = {R.id.rusName, R.id.ruwUrl, R.id.ruuName, R.id.rupWord, R.id.ruNotes}; 

adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, from, to); 


loginList = (ListView) 
findViewById(R.id.loginlist); 
loginList.setOnItemClickListener(this); 

webLogin = (Button) 
findViewById(R.id.button3); 
webLogin.setOnClickListener(this); 
} 

public Loader<Cursor> onCreateLoader(int id, Bundle args) { 

String[] projection = { dataStore.COLUMN_NAME_SITE, dataStore.COLUMN_NAME_ADDRESS, dataStore.COLUMN_NAME_USERNAME, dataStore.COLUMN_NAME_PASSWORD, dataStore.COLUMN_NAME_NOTES}; 
CursorLoader cursorloader = new CursorLoader(this, ListProvider.CONTENT_URI, projection, null , null, null); 
return cursorloader; 
} 
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) { 
adapter.changeCursor(cursor); 
} 
public void onLoaderReset(Loader<Cursor> cursorLoader) { 
adapter.changeCursor(null); 
} 


@Override 
public void onClick (View v) { 
Intent webLoginIntent = new Intent (this, LoginPlusActivity.class); 
startActivity(webLoginIntent); 
} 

public List<String> populateList(){ 

List<String> webNameList = new ArrayList<String>(); 

dataStore openHelperClass = new dataStore (this); 

SQLiteDatabase sqliteDatabase = openHelperClass.getReadableDatabase(); 

Cursor cursor = sqliteDatabase.query(dataStore.TABLE_NAME_INFOTABLE, null, null, null, null, null, dataStore.COLUMN_NAME_SITE, null); 

while (cursor.moveToNext()){ 
String sName = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_SITE)); 
String wUrl = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_ADDRESS)); 
String uName = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_USERNAME)); 
String pWord = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_PASSWORD)); 
String lNotes = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_NOTES)); 

LoginDetails lpDetails = new LoginDetails(); 
lpDetails.setsName(sName); 
lpDetails.setwUrl(wUrl); 
lpDetails.setuName(uName); 
lpDetails.setpWord(pWord); 
lpDetails.setlNotes(lNotes); 

loginArrayList.add(lpDetails); 
webNameList.add(sName); 
} 

cursor.close(); 
return webNameList; 
} 

SQLite는 DB는 :

어댑터에서 사용할 수하기 위해
String sqlDataStore = "create table if not exists " + 
     TABLE_NAME_INFOTABLE + " ("+ BaseColumns._ID + " integer primary key autoincrement," 

        + COLUMN_NAME_SITE + " text not null," 
        + COLUMN_NAME_ADDRESS + " text not null," 
        + COLUMN_NAME_USERNAME + " text not null," 
        + COLUMN_NAME_PASSWORD + " text not null," 
        + COLUMN_NAME_NOTES + " text not null);"; 

     db.execSQL(sqlDataStore); 
    } 

답변

1

, 당신 SQLite는 테이블은 "_id"을 가지고 있어야합니다 기둥. 네가 가진 테이블에없는 것 같아. 일반적인 방법은 정수 기본 키 자동 증가로 선언하도록하는 것입니다. this answer을 확인하십시오.

+0

제안 해 주셔서 감사합니다. 내 DB에는 실제로 ID 열이 있습니다. 내 어댑터에이 열을 추가하지 않았다고 가정합니다. 내가 어떻게이 일을 성취 할 수 있겠는가. – sean

+0

this android.database.CursorWrapper.getColumnIndexOrThrow (CursorWrapper.java:74)에 따라 반환 된 커서에는 _id 열이 없습니다. 공급자에서 수행중인 쿼리 때문일 수 있습니다. 어댑터의 문제는 아닙니다. 그것은 커서의 문제입니다. – fedepaol

+0

내 공급자의 쿼리 작성기에서 colum id에 대한 코드가 변경되었습니다 (맨 위의 콘텐츠 공급자 링크 참조). 내가 한 일이 맞는지는 알 수 없지만 지금은 새로운 오류가 발생합니다. (logcat 참조) – sean