光标不显示秒 activity 中的数据

cursor is not displaying data in second activity

我有一个项目列表,数据存储在SQLite中。当我想获得项目的详细视图时出现问题,它不显示任何数据。 这是 activity,它在列表视图中显示数据库中的所有行,效果很好。

public class List extends Activity {

    public final static String ID_EXTRA="com.example.bazadanych._ID";

    DBAdapter myDB;

    String passedV=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        passedV=getIntent().getStringExtra(MainActivity.ID_EXTRA);

        openDB();

        populateListViewDB ();

        onclickcallback();

    }

@Override
    protected void onDestroy() {
        super.onDestroy();
        closeDB();
    }

private void openDB() {
        myDB = new DBAdapter(this);
        myDB.open();

    }

private void closeDB() {
        myDB.close();

}

     private void populateListViewDB() {
    Cursor cursor = myDB.getAllRows();

    startManagingCursor(cursor);

    String[] fromFieldNames = new String[]
                {DBAdapter.KEY_NAME, DBAdapter.KEY_COUNTRY, DBAdapter.KEY_REGION, DBAdapter.KEY_PHONE};
    int [] toViewIDs = new int []
            {R.id.list_item_name, R.id.list_item_country, R.id.list_item_region, R.id.list_icon_item};

    SimpleCursorAdapter myCursorAdapter = new SimpleCursorAdapter(
            this, 
            R.layout.list_item, 
            cursor,                 
            fromFieldNames,         
            toViewIDs               
            );  


    ListView myList = (ListView) findViewById(R.id.listViewDB);
    myList.setAdapter(myCursorAdapter);

    }
              private void onclickcallback() {
         ListView myList = (ListView) findViewById(R.id.listViewDB);
            myList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View viewClicked,
                    int position, long id) {

                Intent intent = new Intent(List.this, Details.class);
                intent.putExtra(ID_EXTRA, String.valueOf(id));
                startActivity(intent);       
                                }
                        });
     }
}

从 List.class 单击列表中的项目后,用户可以移动到 details.class,它应该显示项目的详细信息。不幸的是,它没有显示任何内容,也没有给出任何错误。

我正在将一个 ID 从一个 activity 传递到另一个,它从一个移到另一个但后来不显示任何数据,

public class Details extends Activity {

    DBAdapter myDB;

    String passedV=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details);

        passedV=getIntent().getStringExtra(List.ID_EXTRA);      
        myDB = new DBAdapter(this);
    }

         private void populatedetailsViewDB() {
        Cursor cursor = myDB.getRow(0);

        startManagingCursor(cursor);


        String[] fromFieldNames = new String[]
                    {DBAdapter.KEY_NAME, DBAdapter.KEY_COUNTRY, DBAdapter.KEY_REGION, DBAdapter.KEY_ADRESS, DBAdapter.KEY_PHONENUM, DBAdapter.KEY_PHONE};
        int [] toViewIDs = new int []
                {R.id.item_name, R.id.item_country, R.id.item_region, R.id.item_adress, R.id.item_phonenum, R.id.list_icon_item};

        SimpleCursorAdapter myCursorAdapter = new SimpleCursorAdapter(
                this, 
                R.layout.item_layout, 
                cursor,                 
                fromFieldNames,         
                );  

        ListView myList = (ListView) findViewById(R.id.detailsViewDB);
        myList.setAdapter(myCursorAdapter);


    }
}

这是从 DBAdapter 获取一行。

public class DBAdapter {

...

public DBAdapter(Context ctx) {
        this.context = ctx;
        myDBHelper = new DatabaseHelper(context);
    }

    // Open the database connection.
    public DBAdapter open() {
        db = myDBHelper.getWritableDatabase();
        return this;
    }

    // Close the database connection.
    public void close() {
        myDBHelper.close();
    }

...

    public Cursor getRow(long rowId) {
        String where = KEY_ROWID + "=" + rowId;
        Cursor c =  db.query(true, DATABASE_TABLE, ALL_KEYS, 
                        where, null, null, null, null, null);
        if (c != null) {
            c.moveToFirst();
        }
        return c;
    }

谁能看出可能是什么问题?

所以您在 DBAdapter class 的 getRow 方法上查询数据库,其中 returns 一个游标指向单行。但是在您的详细信息 activity 中,您总是调用 getRow(0),而不是项目的实际行。

您可能想要更改此方法:

private void populatedetailsViewDB() {
        myDB.open();
        Cursor cursor = myDB.getRow(Long.parseLong (passedV));

        startManagingCursor(cursor);


        String[] fromFieldNames = new String[]
                    {DBAdapter.KEY_NAME, DBAdapter.KEY_COUNTRY, DBAdapter.KEY_REGION, DBAdapter.KEY_ADRESS, DBAdapter.KEY_PHONENUM, DBAdapter.KEY_PHONE};
        int [] toViewIDs = new int []
                {R.id.item_name, R.id.item_country, R.id.item_region, R.id.item_adress, R.id.item_phonenum, R.id.list_icon_item};

        SimpleCursorAdapter myCursorAdapter = new SimpleCursorAdapter(
                this, 
                R.layout.item_layout, 
                cursor,                 
                fromFieldNames,         
                );  

        ListView myList = (ListView) findViewById(R.id.detailsViewDB);
        myList.setAdapter(myCursorAdapter);
        myDB.close();

    }