【问题标题】:Fail to open activity for second time第二次打开活动失败
【发布时间】:2015-02-18 09:17:34
【问题描述】:

在我的应用程序中,当我启动应用程序时,第一次一切正常,我可以在活动之间导航,但是当回到第一个活动 (MainActivity) 并尝试转到第二个活动时,我的应用程序崩溃了,但我没有知道为什么吗?!

在 MainActivity 中:

    img_khayam.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {

        Intent intent = new Intent(MainActivity.this,KhayamSeason.class);
        MainActivity.this.startActivity(intent);

    }
});

在第二个活动中(KhayamSeason):

        package com.xalid.khayam;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class KhayamSeason extends ListActivity {
    private database db;
    private String[] Name;
    private String[] Id;
    private int i =0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.seasone);
        db = new database(this);
        refresher();
        setListAdapter(new AA());
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        Intent intent = new Intent(KhayamSeason.this, ShowText.class);
        //intent.putExtra("name", Name[position]);
        intent.putExtra("id", Id[position]);
        KhayamSeason.this.startActivity(intent);
    }

    class AA extends ArrayAdapter<String> {

        public AA() {
            super(KhayamSeason.this, R.layout.raw_seasone, Name);

        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater in = getLayoutInflater();
            View row = in.inflate(R.layout.raw_seasone, parent, false);
            TextView name = (TextView) row.findViewById(R.id.name_poet);
            name.setText(Name[position]);
            name.setTypeface(MainActivity.font);
            return (row);
        }

    }
    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed();
        finish();


    }

    private void refresher() {
        db.open();
        int save = db.Count_field("khayam");
        Name = new String[save];
        Id = new String[save];
        for (i = 0; i < save; i++) {
            Name[i] = db.Show_Season("khayam", i);
            Id[i] = db.get_id2("khayam", i, 0);
        }
        db.close();

    }
}

在数据库类中:

       public Integer Count_field(String table){
        Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" group by ID", null);
        int i = Cursor.getCount();
        return i ;
    }

  public String Show_Season(String table , int row){
        Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" group by ID", null);
        Cursor.moveToPosition(row);
        String s = Cursor.getString(1);
        return s ;
    }
    public String get_id2(String table,int field, int col){
        Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" group by ID", null);
        Cursor.moveToPosition(field);
        String s = Cursor.getString(col);
        return s ;
    }

正如我第一次说的那样,当我在 MainActivity 和第二个活动(KhayamSeason)之间导航时没有问题,但是当我按下返回按钮并重试时,我的应用程序会崩溃。崩溃后,当我查看 Logcat 时,它会将我引向这些代码行:

 Name[i] = db.Show_Season("khayam", i);
        Id[i] = db.get_id2("khayam", i, 0);

但是,如果这两条线有问题,为什么第一次运行良好?! 我的应用程序实际上设计用于在第二个活动中显示 khayam 的诗歌季节列表,并将名称保存在 SQLite 数据库中,表名为“khayam”,我的第一个字段是“ID”,第二个“名称”和第三个“文本”。

我的问题在哪里? 或者如何为第二个活动设置默认值?因为我认为按下返回按钮后会保留一些数据。

【问题讨论】:

  • 崩溃 > 没有发布 Logcat ??
  • Logcat 只是告诉我哪里出错了
  • "我有错误,但是Logcat只显示错误,为什么我有错误时需要知道错误?" -> 你没有任何意义......
  • 我不知道怎么告诉你,但我的问题是为什么第一次一切正常,但第二次却不行?
  • 但如果这两行有问题,为什么第一次运行良好?! - 正是你应该发布 logcat 的原因,因为它会告诉你为什么,是什么原因造成的它

标签: android database android-activity


【解决方案1】:

最后我通过关闭游标更改数据库类来解决我的问题:

     public String get_id2(String table,int field, int col){


        Cursor Cursor=null;
       try {
         Cursor = mydb.rawQuery("SELECT * FROM "+table+" group by ID", null);
         Cursor.moveToPosition(field);
        String s = Cursor.getString(col);
        return s ;
        } catch (Exception e) {

        } finally {
           if(Cursor!= null){
               Cursor.close();
           }
        }
    return null ;
    }
 public Integer Count_field(String table){
        Cursor cu=null;
        int i;
           try {
                cu = mydb.rawQuery("SELECT * FROM "+table+" group by ID", null);
                i = cu.getCount();
                return i;
            } catch (Exception e) {

            } finally {
               if(cu!= null){
                   cu.close();
               }
            }
        return null ;
    }
    public String Show_Season(String table , int row){


        Cursor Cursor=null;
           try {
               Cursor = mydb.rawQuery("SELECT * FROM "+table+" group by ID", null);
               Cursor.moveToPosition(row);
                String s = Cursor.getString(1);
                return s ;
            } catch (Exception e) {

            } finally {
               if(Cursor!= null){
                   Cursor.close();
               }
            }
        return null ;

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-02
    • 2013-12-17
    • 2020-10-02
    • 2011-03-22
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多