2016-11-29 4 views
-2

Я создал приложение на мини-андроиде 5. Но я хочу запустить его на 4.4 android. Поэтому я скопировал файлы с первого проекта на второй и исправил такие вещи, как AndroidManifest. Когда я компилирую первую версию evrythink, все нормально, но в версии, которая должна работать с android 4.4, я получаю SQLite exeption «нет такого столбца». Код:такой код ошибки столбца не работает при использовании 4.4 Kitkat

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_select, container, false); 
     helper = new MobilnaPytajkaDatabase(getContext()); 
     db = helper.getWritableDatabase(); 
     cursor = db.query("QUIZ_TABLE", new String[]{"_id", "QUESTION"}, 
       "TYPE=0", null, null, null, null, null); 
     lista = (ListView) view.findViewById(R.id.listview); 
     if(cursor.moveToFirst()) { 
      try { 
       CursorAdapter ca = new SimpleCursorAdapter(getContext(), 
         R.layout.whitetextlayout1, cursor, 
         new String[]{"QUESTION"}, new int[]{R.id.text1}, 
         0); 
       lista.setAdapter(ca); 
       lista.setOnItemClickListener(listener); 
      } catch (SQLiteException e) { 
       ; 
      } 
      return view; 
     } 
     else 
      return inflater.inflate(R.layout.emptylist, container,false); 
    } 

SQLite открыт вспомогательный класс:

package com.nieruchalski.mobilnapytajkaforkitkat; 

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

public class MobilnaPytajkaDatabase extends SQLiteOpenHelper { 
    public final static int DB_VERSION = 2; 
    public final static String DB_NAME = "QUIZ_DATA"; 

    MobilnaPytajkaDatabase(Context context) 
    { 
     super(context, DB_NAME, null, DB_VERSION); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
    } 

    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     sqLiteDatabase.execSQL("CREATE TABLE QUIZ_TABLE (_id INTEGER PRIMARY KEY AUTOINCREMENT, " 
     + "QUESTION TEXT" 
     + "ANSWER TEXT" 
     + "TYPE INTEGER);"); 
    } 
} 

Logcat:

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.nieruchalski.mobilnapytajkaforkitkat, PID: 2450 
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nieruchalski.mobilnapytajkaforkitkat/com.nieruchalski.mobilnapytajkaforkitkat.selectQuiz}: android.database.sqlite.SQLiteException: no such column: TYPE (code 1): , while compiling: SELECT _id, QUESTION FROM QUIZ_TABLE WHERE TYPE=0 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2509) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2569) 
         at android.app.ActivityThread.access$900(ActivityThread.java:150) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1399) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:168) 
         at android.app.ActivityThread.main(ActivityThread.java:5885) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 
        Caused by: android.database.sqlite.SQLiteException: no such column: TYPE (code 1): , while compiling: SELECT _id, QUESTION FROM QUIZ_TABLE WHERE TYPE=0 
         at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
         at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:921) 
         at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:532) 
         at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
         at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
         at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) 
         at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:68) 
         at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1402) 
         at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1249) 
         at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1120) 
         at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1326) 
         at com.nieruchalski.mobilnapytajkaforkitkat.selectFragment.onCreateView(selectFragment.java:38) 
         at android.app.Fragment.performCreateView(Fragment.java:2238) 
         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:977) 
         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1152) 
         at android.app.BackStackRecord.run(BackStackRecord.java:793) 
         at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1539) 
         at android.app.FragmentController.execPendingActions(FragmentController.java:325) 
         at android.app.Activity.performStart(Activity.java:6278) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2472) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2569)  
         at android.app.ActivityThread.access$900(ActivityThread.java:150)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1399)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:168)  
         at android.app.ActivityThread.main(ActivityThread.java:5885)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)  

ответ

2

Ничего общего с KitKat на самом деле. Вам просто не хватает запятой , между спецификациями столбцов в MobilnaPytajkaDatabase#onCreate(). Добавьте их туда и удалите приложение, чтобы удалить старую базу данных и создать новую.