2010-11-23 1 views
4

Я новичок в Android и перед тем, как задать вопрос здесь, я был googling, но по этому вопросу я не могу найти ответ. (также у этого stackoverflow.com/questions/4195089 нет ответа).invalid statement in fillwindow() в Android

В моем тестовом приложении на эмуляторе у меня есть ошибка ОШИБКА/Курсор (1512): Неверный оператор в fillWindow() на LogCat, когда я нажимаю кнопку «Назад» при втором действии.
11-23 19: 06: 05,050: ОТЛАДКА/TestDB/отладки/MainActivity (1512): OnCreate
11-23 19: 06: 06,820: ОТЛАДКА/TestDB/отладки/MainActivity (1512): OpenDatabase
11-23 19: 06: 07.240: DEBUG/TestDB/Debug/MainActivity (1512): String [] from
11-23 19: 06: 07.270: DEBUG/TestDB/Debug/MainActivity (1512): SimpleCursorAdapter
11 -23 19: 06: 07.500: DEBUG/TestDB/Debug/MainActivity (1512): myDbHelper.close
11-23 19: 06: 07.520: DEBUG/TestDB/Debug/MainActivity (1512): onStart
11-23 19: 06: 07.551: DEBUG/TestDB/Debug/MainActivity (1512): onResu me
11-23 19: 06: 09.040: INFO/ActivityManager (587): Отображается активность ru.olegi/.MainActivity: 7962 ms
11-23 19: 06: 11.850: INFO/ActivityManager (587): Начальная деятельность : Intent {comp = {ru.olegi/ru.olegi.AnotherActivity}}
11-23 19: 06: 12.100: DEBUG/TestDB/Debug/AnotherActivity (1512): onCreate
11-23 19: 06: 12.970 : INFO/ActivityManager (587): отображаемая активность ru.olegi /. Дополнительная информация: 1100 мс
11-23 19: 06: 14.550: ОШИБКА/Курсор (1512): Недопустимый оператор в fillWindow()
11-23 19: 06: 14.590: DEBUG/TestDB/Debug/MainActivity (1512): onStart
11-23 19: 06: 14.600: DEBUG/T estDB/Debug/MainActivity (1512): onResume

Весь код хранится в OnCreate. Поэтому, когда я нажимаю назад, ListView пуст. Для этого переместите код в onStart. Вот лог для этого и опять Invalid заявление в fillWindow()
11-23 19: 26: 06,280: DEBUG/TestDB/Debug/MainActivity (6597): OnCreate
11-23 19: 26: 06.462 : ОТЛАДКА/TestDB/отладки/MainActivity (6597): OnStart
11-23 19: 26: 06,700: ОТЛАДКА/TestDB/отладки/MainActivity (6597): OpenDatabase
11-23 19: 26: 06.740: ОТЛАДКА/TESTDB/Debug/MainActivity (6597): String [] from
11-23 19: 26: 06.750: DEBUG/TestDB/Debug/MainActivity (6597): SimpleCursorAdapter
11-23 19: 26: 06.981: DEBUG/TestDB/Debug/MainActivity (6597): myDbHelper.close
11-23 19: 26: 07.010: DEBUG/TestDB/Debug/MainActivity (6597): onResume
11-23 19: 26: 08.030: INFO/ActivityManager (587): Отображается активность ru.olegi/.MainActivity: 3876 мс
11-23 19: 26: 15.419: INFO/ActivityManager (587): Начальная деятельность: Intent {comp = {ru.olegi/ru.olegi.AnotherActivity}}
11-23 19: 26: 15.770: DEBUG/TestDB/Debug/AnotherActivity (6597): onCreate
11-23 19: 26: 16.440: INFO/ActivityManager (587): Отображается активность ru.olegi /. Дополнительная информация: 1001 мс
11-23 19:26: 17.860: ОШИБКА/Курсор (6597): Недопустимый оператор в fillWindow()
11-23 19:26:17.870: ОТЛАДКА/TestDB/отладки/MainActivity (6597): OnStart
11-23 19: 26: 18,260: ОТЛАДКА/TestDB/отладки/MainActivity (6597): OpenDatabase
11-23 19: 26: 18.290: ОТЛАДКА/TestDB/Debug/MainActivity (6597): String [] from
11-23 19: 26: 18.310: DEBUG/TestDB/Debug/MainActivity (6597): SimpleCursorAdapter
11-23 19: 26: 18.670: DEBUG/TestDB/отладки/MainActivity (6597): myDbHelper.close
11-23 19: 26: 18.700: ОТЛАДКА/TestDB/отладки/MainActivity (6597): onResume

Этот код

package ru.olegi; 

import java.io.IOException; 

import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 

public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 

    private DatabaseHelper myDbHelper; 
    private ListView lv1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d("TestDB/Debug/MainActivity", "onCreate");   

     setContentView(R.layout.main);   

    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Log.d("TestDB/Debug/MainActivity", "onStart"); 

     // DATABASE OPEN - START 
     DatabaseHelper myDbHelper = new DatabaseHelper(this); 
     myDbHelper = new DatabaseHelper(this); 

     try { 
      myDbHelper.createDataBase(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }   

     try { 
      myDbHelper.openDataBase(); 
     }catch(SQLException sqle){ 
      throw sqle; 
     }   

     Log.d("TestDB/Debug/MainActivity", "openDataBase");   

     // DATABASE OPEN - END 

     Cursor c = myDbHelper.fetchAllFoodname(); 
     startManagingCursor(c);      

     lv1 = (ListView) findViewById(R.id.ListView01); 

     String[] from = new String[] { DatabaseHelper.KEY_NAME }; 
     int[] to = new int[] { android.R.id.text1}; 

     Log.d("TestDB/Debug/MainActivity", "String[] from"); 

     SimpleCursorAdapter notes = 
      new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, c, from, to); 

     Log.d("TestDB/Debug/MainActivity", "SimpleCursorAdapter"); 

     lv1.setAdapter(notes); 

     lv1.setOnItemClickListener(new OnItemClickListener() {  
      //@Override  
      public void onItemClick(AdapterView<?> a, View v, int position, long id) { 

       Intent intent = new Intent(); 

       //getApplicationContext() 
       intent.setClass(MainActivity.this, AnotherActivity.class); 

       //intent.putExtra(AnotherActivity.EXT_ID, id);    

       startActivity(intent); 
       //finish(); 
      } 
     }); 

     // DATABASE CLOSE - START  

     myDbHelper.close(); 
     Log.d("TestDB/Debug/MainActivity", "myDbHelper.close"); 

     // DATABASE CLOSE - END   
    }  

    @Override 
    public void onResume(){ 
     super.onResume(); 
     Log.d("TestDB/Debug/MainActivity", "onResume"); 
    } 

    @Override 
    public void onDestroy(){ 
     super.onDestroy(); 
     Log.d("TestDB/Debug/MainActivity", "onDestroy");   
    }   
} 

Здесь groups.google.com/group/android-developers/browse_thread/thread/8bec793c626fb405 я прочитал, для исправления fillwindow (ошибка) нужно

Короткий ответ; Объект вашей базы данных (db) находится в неправильном объеме. Дольше ответ; Объявив db в методе , вы говорите JVM, что когда метод завершит вашу базу данных соединение (db) больше не является полезным. Что вы должны сделать, это объявить db в уровне класса вместо метода уровне, создать его в onCreate и закрыть его в onDestroy.

ОК, я перемещаю разделы // БАЗОВЫЕ ДАННЫЕ ОТКРЫТЫ - СТАРТ и // БАЗЫ ДАННЫХ ЗАКРЫТЬ - НАЧАТЬСЯ в onCreate и toDestory. И теперь у меня есть исключение на старте
11-23 19: 35: 39,310: DEBUG/TestDB/Debug/MainActivity (8975): OnCreate
11-23 19: 35: 40,050: DEBUG/TestDB/Debug/MainActivity (8975): openDataBase
11-23 19: 35: 40.050: DEBUG/TestDB/Debug/MainActivity (8975): onStart
11-23 19: 35: 40.090: DEBUG/AndroidRuntime (8975): выключение виртуальной машины
11-23 19: 35: 40.100: WARN/dalvikvm (8975): threadid = 3: резьба, выходящая с неперехваченным исключением (группа = 0x4000fe70)
11-23 19: 35: 40.120: ERROR/AndroidRuntime (8975): Неактивный обработчик: основной поток из-за неперехваченного исключения
11-23 19: 35: 40.300: ERROR/AndroidRuntime (8975): java.lang.RuntimeException: не удалось запустить активность ComponentInfo {ru.olegi/ru.olegi.MainActivity}: java.lang.NullPointerException
11- 23 19: 35: 40.300: ОШИБКА/AndroidRuntime (8975): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2268)
11-23 19: 35: 40.300: ERROR/AndroidRuntime (8975): на android. app.ActivityThread.handleLaunchActivity (ActivityThread.java:2284)
11-23 19: 35: 40,300: ОШИБКА/AndroidRuntime (8975): в android.app.ActivityThread.access $ 1800 (ActivityThread.java:112)
11- 23 19: 35: 40.300: ERROR/AndroidRuntime (8975): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1692)
11-23 19: 35: 40.300: ОШИБКА/AndroidRuntime (8975): at android.os.Handler.dispatchMessage (Handler.java:99)
11-23 19: 35: 40.300: ERROR/AndroidRuntime (8975) : at android.os.Looper.loop (Looper.java:123)
11-23 19: 35: 40.300: ОШИБКА/AndroidRuntime (8975): at android.app.ActivityThread.main (ActivityThread.java:3948)
11-23 19: 35: 40.300: ОШИБКА/AndroidRuntime (8975): at java.lang.(Способ).
11-23 19: 35: 40.300: ОШИБКА/AndroidRuntime (8975): при java.lang.reflect.Method.invoke (Method.java:521)
11-23 19 : 35: 40.300: ERROR/AndroidRuntime (8975): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:782)
11-23 19: 35: 40.300: ERROR/AndroidRuntime (8975) : at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:540)
11-23 19: 35: 40.300: ERROR/AndroidRuntime (8975): at dalvik.system.NativeStart.main (собственный метод)
11-23 19: 35: 40.300: ERROR/AndroidRuntime (8975): вызвано: java.lang.NullPointerException
11-23 19: 35: 40.300: ERROR/AndroidRuntime (8975)): at ru.olegi.MainActivity.onStart (MainActivity.java:59)
11-23 19: 35: 40.300: ОШИБКА/AndroidRuntime (8975): at android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1205)
11-23 19: 35: 40.300: ERROR/AndroidRuntime (8975): at android.app.Activity.performStart (Activity.java:3490)
11-23 19: 35: 40.300: ERROR/AndroidRuntime (8975) : в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2240)
11-23 19: 35: 40.300: ERROR/AndroidRuntime (8975): 11 ... подробнее

Вот код с перемещаемых DB-секциями:

package ru.olegi; 

import java.io.IOException; 

import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 

public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 

    private DatabaseHelper myDbHelper; 
    private ListView lv1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d("TestDB/Debug/MainActivity", "onCreate");   

     setContentView(R.layout.main); 

     // DATABASE OPEN - START 
     DatabaseHelper myDbHelper = new DatabaseHelper(this); 
     myDbHelper = new DatabaseHelper(this); 

     try { 
      myDbHelper.createDataBase(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }   

     try { 
      myDbHelper.openDataBase(); 
     }catch(SQLException sqle){ 
      throw sqle; 
     }   

     Log.d("TestDB/Debug/MainActivity", "openDataBase");   

     // DATABASE OPEN - END 


    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Log.d("TestDB/Debug/MainActivity", "onStart"); 

     Cursor c = myDbHelper.fetchAllFoodname(); 
     startManagingCursor(c);      

     lv1 = (ListView) findViewById(R.id.ListView01); 

     String[] from = new String[] { DatabaseHelper.KEY_NAME }; 
     int[] to = new int[] { android.R.id.text1}; 

     Log.d("TestDB/Debug/MainActivity", "String[] from"); 

     SimpleCursorAdapter notes = 
      new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, c, from, to); 

     Log.d("TestDB/Debug/MainActivity", "SimpleCursorAdapter"); 

     lv1.setAdapter(notes); 

     lv1.setOnItemClickListener(new OnItemClickListener() {  
      //@Override  
      public void onItemClick(AdapterView<?> a, View v, int position, long id) { 

       Intent intent = new Intent(); 

       //getApplicationContext() 
       intent.setClass(MainActivity.this, AnotherActivity.class); 

       //intent.putExtra(AnotherActivity.EXT_ID, id);    

       startActivity(intent); 
       //finish(); 
      } 
     }); 

    }  

    @Override 
    public void onResume(){ 
     super.onResume(); 
     Log.d("TestDB/Debug/MainActivity", "onResume"); 
    } 

    @Override 
    public void onDestroy(){ 
     super.onDestroy(); 
     Log.d("TestDB/Debug/MainActivity", "onDestroy"); 

     // DATABASE CLOSE - START  

     myDbHelper.close(); 
     Log.d("TestDB/Debug/MainActivity", "myDbHelper.close"); 

     // DATABASE CLOSE - END  
    }   
} 

Пожалуйста, помогите исправить Invalid заявления в fillWindow()

AnotherActivity - просто с TextView, MainActivity имеет только ListView + OnClick слушатель

ответ

0
private DatabaseHelper myDbHelper; 
... 
public void onStart() { 
    DatabaseHelper myDbHelper = new DatabaseHelper(this); 

Я удалил объявление DatabaseHelper в onStart. Это фиксировало ОШИБКУ/Курсор (1512)