2013-02-11 4 views
0

Я пытаюсь загрузить значения из моей базы данных sqlite на android, но я продолжаю получать null на dataAdapter. Я использовал этот метод для загрузки значений во многих местах моего кода. Но здесь я продолжаю получать нуль, и я не могу понять, почему. Надеюсь, вы можете помочь мне. Я уверен, что это небольшая ошибка, но это было несколько дней, и я не могу найти ее. Я получаю нулевую ошибку в последних строках переменной dataAdapter1. Где ive ставит звезды.null on dataAdapter sqlite android

Моя база данных:

public long insertDefaultDistanceUnit(String dUnit, int usedBoolean) { 
    ContentValues initialValues = new ContentValues(); 
    initialValues.put(MY_CURRENT_DISTANCE, dUnit); 
    initialValues.put(MY_CURRENT_DISTANCE_BOOLEAN, usedBoolean); 
    return db.insert(MY_CURRENT_DISTANCE_UNIT_TABLE, null, initialValues); 
} 

public Cursor getAllDistanceUnits() { 
    return db.query(MY_CURRENT_DISTANCE_UNIT_TABLE, 
      new String[] { MY_CURRENT_DISTANCE }, null, null, null, null, 
      null); 
} 

public Cursor getCurrentDistanceUnit() throws SQLException { 
    Cursor mCursor = db.query(true, MY_CURRENT_DISTANCE_UNIT_TABLE, 
      new String[] { MY_CURRENT_DISTANCE }, 
      MY_CURRENT_DISTANCE_BOOLEAN + "='1'", null, null, null, null, 
      null); 
    if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    return mCursor; 
} 

Мои настройки класс, который я поставил значение в таблицу перед открытием класса я хочу, чтобы загрузить значение:

db.open(); 
    Cursor c2 = db.getAllDistanceUnits(); 
    distanceList = new ArrayList<String>(); 
    if (c2.moveToFirst()) { 
     do { 
      distanceList.add(c2.getString(c2 
        .getColumnIndex(DBAdapter.MY_CURRENT_DISTANCE))); 
     } while (c2.moveToNext()); 
    } 
    if (distanceList.size() > 0) { 
     distanecExist = 1; 
    } 
    db.close(); 

    if (distanecExist == 0) { 
     currentDistanceUnit = new ArrayList<String>(); 
     currentDistanceUnit.add("km" + " Kilometers"); 
     currentDistanceUnit.add("m" + " Miles"); 
     db.open(); 
     for (int i = 0; i <= currentDistanceUnit.size() - 1; i++) { 
      if (i == 0) { 
       db.insertDefaultDistanceUnit(currentDistanceUnit.get(i) 
         .toString(), 1); 
      } else { 
       db.insertDefaultDistanceUnit(currentDistanceUnit.get(i) 
         .toString(), 0); 
      } 
     } 
     db.close(); 
    } 

и мой класс, что я хочу загружать значения:

currentDistance = (TextView) findViewById(R.id.currentDistance); 
    distanceSpinner = (Spinner) findViewById(R.id.distanceSpinner); 
    setNewDistanceButton = (Button) findViewById(R.id.setNewDistanceButton); 

    db.open(); 
    Cursor c2 = db.getCurrentDistanceUnit(); 
    currentDistanceList2 = new ArrayList<String>(); 
    String distanceUnit = ""; 
    if (c2.getCount() == 1) { 
     distanceUnit = c2.getString(c2 
       .getColumnIndex(DBAdapter.MY_CURRENT_DISTANCE)); 
    } 
    currentDistance.setText(distanceUnit); 
    db.close(); 

    db.open(); 
    Cursor c1 = db.getAllDistanceUnits(); 
    currentDistanceList = new ArrayList<String>(); 
    if (c1.moveToFirst()) { 
     do { 
      currentDistanceList.add(c1.getString(c1 
        .getColumnIndex(DBAdapter.MY_CURRENT_DISTANCE))); 
     } while (c1.moveToNext()); 
    } 
    db.close(); 
    dataAdapter1 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, currentDistanceList); 
    dataAdapter1 
      .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    distanceSpinner.setAdapter(**dataAdapter1**); 
    distanceSpinner.setSelection(0); 

также здесь ошибки LogCat:

02-11 09:33:46.870: E/AndroidRuntime(27105): FATAL EXCEPTION: main 
02-11 09:33:46.870: E/AndroidRuntime(27105): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at android.app.ActivityThread.access$600(ActivityThread.java:140) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at android.os.Looper.loop(Looper.java:137) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at android.app.ActivityThread.main(ActivityThread.java:4898) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at java.lang.reflect.Method.invokeNative(Native Method) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at java.lang.reflect.Method.invoke(Method.java:511) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at dalvik.system.NativeStart.main(Native Method) 
02-11 09:33:46.870: E/AndroidRuntime(27105): Caused by: java.lang.NullPointerException 
02-11 09:33:46.870: E/AndroidRuntime(27105): at com.example.mycarfuel.ChangeDistanceActivity.onCreate(ChangeDistanceActivity.java:41) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at android.app.Activity.performCreate(Activity.java:5206) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083) 
02-11 09:33:46.870: E/AndroidRuntime(27105): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064) 
+0

Можете ли вы опубликовать stacktrace? – Geros

+0

true. забыл об этом. В опубликованном –

+0

проверьте контекст ArrayAdapter и проверьте, где вы добавляете данные в ваш arraylist currentDistanceList.add, и убедитесь, что ваш arraylist не равен нулю. –

ответ

0

Если мы попытаемся установитьAdapter (null), исключений с ошибкой и исключения нулевого указателя не будет. Если авария на линии

distanceSpinner.setAdapter(**dataAdapter1**); 

distanceSpinner является недействительным не ваш DataAdapter.

+0

Я изменил порядок некоторых из кода, и теперь ошибка направляется в этой строке \t \t currentDistance.setText (distanceUnit); Я печатаю в журнале перед установкой текста distanceUnit и появляется значение init. Но я продолжаю получать null, когда setText в currentDistance. Мой currentDistance правильно объявлен. Почему я должен получить null, так как distanceUnit имеет значения? –

+0

Его нетолькое расстояние, текущее Сопротивление - преступник. Его аналогичная ошибка. Проверьте макет, который вы использовали для setContentView. Имеет ли он идентификатор currentDistance, distanceSpinner и т. Д. –

+0

Вы правы m8. Проблема была в setContentView. Немного отличается от этого, и это вызвало все эти неприятности. спасибо –

Смежные вопросы