2011-12-29 114 views
2

enter image description here後退按鈕不起作用

當我點擊這裏的米哈伊我從下面

enter image description here

問題得到活動,當我點擊後退按鈕最後一個屏幕上,我不回去搜尋活動,但我得到了如下因素的錯誤:

    12-29 15:55:47.153: E/AndroidRuntime(408): FATAL EXCEPTION: main 
        12-29 15:55:47.153: E/AndroidRuntime(408): java.lang.RuntimeException: Unable to resume activity {org.example.dbcontactconsole/org.example.dbcontactconsole.Search}: java.lang.IllegalStateException: database /data/data/org.example.dbcontactconsole/databases/contactTest1.db already closed 
        12-29 15:55:47.153: E/AndroidRuntime(408): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128) 
       12-29 15:55:47.153: E/AndroidRuntime(408):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143) 
       12-29 15:55:47.153: E/AndroidRuntime(408):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2059) 
       12-29 15:55:47.153: E/AndroidRuntime(408):  at android.os.Handler.dispatchMessage(Handler.java:99) 
        12-29 15:55:47.153: E/AndroidRuntime(408): at android.os.Looper.loop(Looper.java:123) 
       12-29 15:55:47.153: E/AndroidRuntime(408):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
       12-29 15:55:47.153: E/AndroidRuntime(408):  at java.lang.reflect.Method.invokeNative(Native Method) 
       12-29 15:55:47.153: E/AndroidRuntime(408):  at java.lang.reflect.Method.invoke(Method.java:521) 
       12-29 15:55:47.153: E/AndroidRuntime(408):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
       12-29 15:55:47.153: E/AndroidRuntime(408):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
       12-29 15:55:47.153: E/AndroidRuntime(408):  at dalvik.system.NativeStart.main(Native Method) 
       12-29 15:55:47.153: E/AndroidRuntime(408): Caused by: java.lang.IllegalStateException: database /data/data/org.example.dbcontactconsole/databases/contactTest1.db already closed 
       12-29 15:55:47.153: E/AndroidRuntime(408):  at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:237) 
       12-29 15:55:47.153: E/AndroidRuntime(408):  at android.database.sqlite.SQLiteQuery.requery(SQLiteQuery.java:145) 
       12-29 15:55:47.153: E/AndroidRuntime(408):  at android.database.sqlite.SQLiteCursor.requery(SQLiteCursor.java:531) 
       12-29 15:55:47.153: E/AndroidRuntime(408):  at android.app.Activity.performRestart(Activity.java:3795) 
       12-29 15:55:47.153: E/AndroidRuntime(408): at android.app.Activity.performResume(Activity.java:3816) 
       12-29 15:55:47.153: E/AndroidRuntime(408): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118) 

我search.java是:

`

    public class Search extends ListActivity { 

private static int[] TO = {R.id.name }; 
private static String[] FROM = {DbConstants.NAME, DbConstants.PHONE, DbConstants.EMAIL,_ID}; 
private Button sButton; 

private ListView lv1; 
private static SQLiteDatabase db; 
    private DbCreate contacts; 
    private Cursor cursor; 
    private EditText searchText; 
    protected SimpleCursorAdapter adapter; 


     protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.search); 
    searchText=(EditText)findViewById(R.id.searchtext); 
    sButton=(Button)findViewById(R.id.searchButton); 
    sButton.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      showDatabaseContent(); 
       lv1 = getListView(); 

       lv1.setTextFilterEnabled(true); 
     } 
    }); 





    } 


      private Cursor getContacts() { 
     db = contacts.getReadableDatabase(); 
     cursor = db.rawQuery("SELECT _id,name, phone, email FROM contactTest1 WHERE name LIKE ?", 
       new String[]{searchText.getText().toString()+"%"}); 
     startManagingCursor(cursor); 
     return cursor; 
     } 

      public void showDatabaseContent(){ 
    contacts = new DbCreate(this); 
    try { 
     cursor = getContacts(); 
     showContacts(cursor); 
    } finally { 
     contacts.close(); 
     db.close(); 
    } 
     } 

       private void showContacts(Cursor cursor) { 
    //set up data binding 
    adapter = new SimpleCursorAdapter(this, R.layout.item, cursor, FROM, TO); 
    setListAdapter(adapter); 
      } 

      public void onListItemClick(ListView parent, View v, int position, long id) { 
    Intent abaintent = new Intent(this,Detalii.class); 
    Cursor cursor = (Cursor) adapter.getItem(position); 
    abaintent.putExtra("Contact_ID", cursor.getInt(cursor.getColumnIndex("_id"))); 
    startActivity(abaintent); 

      } 

} 

`

這裏是我的.java資訊:

  public class Detalii extends ListActivity 
      { 
      protected TextView contactName; 
      protected TextView contactPhone; 
       protected TextView email; 
      protected int contactId; 
      protected List<Actiune> actiune; 
      protected ActiuneAdapter adapter; 
      @Override 
      public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.detalii); 

      contactId = getIntent().getIntExtra("Contact_ID",0); 
      SQLiteDatabase db = (new DbCreate(this)).getWritableDatabase(); 
      Cursor cursor = db.rawQuery("SELECT name,phone,email FROM contactTest1 WHERE _id=?",new String[]{""+contactId}); 

      if (cursor.getCount() == 1) 
    { 
    cursor.moveToFirst(); 

    actiune= new ArrayList<Actiune>(); 
    String phoneString=cursor.getString(cursor.getColumnIndex("phone")); 
    if (phoneString!=null) 
    { 
    actiune.add(new Actiune("Suna la numar",phoneString,Actiune.ACTION_CALL)); 
    actiune.add(new Actiune("SMS",phoneString,Actiune.ACTION_SMS)); 
    } 
    String stringemail = cursor.getString(cursor.getColumnIndex("email")); 
    if (stringemail != null) { 
      actiune.add(new Actiune("Email", stringemail,Actiune.ACTION_EMAIL)); 
      } 
    adapter = new ActiuneAdapter(); 
    setListAdapter(adapter); 
     } 
     } 
       public void onListItemClick(ListView parent, View view, int position, long id) { 

     Actiune action = actiune.get(position); 

     Intent intent; 
     switch (action.getType()) { 

    case Actiune.ACTION_CALL: 
      Uri callUri = Uri.parse("tel:" + action.getData()); 
      intent = new Intent(Intent.ACTION_CALL, callUri); 
     startActivity(intent); 
      break; 

    case Actiune.ACTION_EMAIL: 
    intent = new Intent(Intent.ACTION_SEND); 
    intent.setType("plain/text"); 
    intent.putExtra(Intent.EXTRA_EMAIL, new String[]{action.getData()}); 
    startActivity(intent); 
    break; 
    case Actiune.ACTION_SMS: 
     Uri smsUri = Uri.parse("sms:" + action.getData()); 
     intent = new Intent(Intent.ACTION_VIEW, smsUri); 
     startActivity(intent); 
     break; 

     } 
     }  

      class ActiuneAdapter extends ArrayAdapter<Actiune> { 

     ActiuneAdapter() { 
      super(Detalii.this, R.layout.actiune_detalii, actiune); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    Actiune action = actiune.get(position); 
    LayoutInflater inflater = getLayoutInflater(); 
    View view = inflater.inflate(R.layout.actiune_detalii, parent, false); 
    TextView label = (TextView) view.findViewById(R.id.label); 
    label.setText(action.getLabel()); 
    TextView data = (TextView) view.findViewById(R.id.data); 
    data.setText(action.getData()); 
    return view; 
    } 

    } 

    } 

我應該怎麼做,使後退按鈕的工作我模擬仿真器上,因爲我沒有a phone

回答

0

嘗試添加代碼SQLiteDatabase db = (new DbCreate(this)).getWritableDatabase();OnResume功能Detalii活動。

0

錯誤提示您已關閉與數據庫的連接,並且您可能嘗試在觸發恢復功能時向數據庫運行問題。

當您重新打開搜索視圖時,通過打開與數據庫的新連接解決此問題。

0

這很簡單。你假設你的數據庫是開放的,但事實上,當你恢復以前的活動時,它實際上是關閉的。可能是因爲你的應用程序沒有正確處理恢復/暫停事件,或者可能是因爲你的數據庫變量聲明爲static。嘗試關閉它在onDestroy()而不是。