1
package com.ctis.abc_final;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class DisplayActivity extends Activity {

    DBAdapter db;

    TextView t1;
    TextView t2;
    TextView t3;
    TextView t4;
    TextView t5;
    TextView t6;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.display);

        try {
            String destPath = "/data/data/" + getPackageName()
                    + "/databases/Ctis487";
            File file = new File(destPath);
            if (!file.exists()) {
                CopyDB(getBaseContext().getAssets().open("Ctis487"),
                        new FileOutputStream(destPath));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        t1 = (TextView) findViewById(R.id.textView8);
        t2 = (TextView) findViewById(R.id.textView9);
        t3 = (TextView) findViewById(R.id.textView10);
        t4 = (TextView) findViewById(R.id.textView11);
        t5 = (TextView) findViewById(R.id.textView12);
        t6 = (TextView) findViewById(R.id.textView13);

        db = new DBAdapter(this);

    }

    public void CopyDB(InputStream inputStream, OutputStream outputStream)
            throws IOException {
        // Copy 1K bytes at a time
        byte[] buffer = new byte[1024];
        int length;
        while ((length = inputStream.read(buffer)) > 0) {
            outputStream.write(buffer, 0, length);
        }
        inputStream.close();
        outputStream.close();
    }

    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.Button01:
            // Get all contacts
            db.open();
            Cursor c = db.getAllContacts();
            if (c.moveToFirst()) {
                do {
                    DisplayContact(c);
                } while (c.moveToNext());
            }
            db.close();

            break;
        }

    }

    public void DisplayContact(Cursor c) {

        t1.setText("" + c.getString(3));
        t2.setText("" + c.getString(1));
        t3.setText("" + c.getString(2));
        t4.setText("" + c.getString(4));
        t5.setText("" + c.getString(5));
        t6.setText("" + c.getString(6));

    }
}

上面的代码只得到最后一个值。我想要做的是当你点击下一个按钮时,它应该得到下一条记录。我怎样才能做到这一点?我在点击上面的代码时定义。但它只检索最后一条记录,为什么?

这仅检索第一条记录。更新请看一下。

switch (v.getId()) {

        case R.id.Button01:
            int record_position =  -1;

            // Get all contacts
            db.open();
            Cursor c = db.getAllContacts();
            if (record_position == -1){
                if (c.moveToFirst()) {
                    record_position = c.getPosition();
                    DisplayContact(c);
                }
            }
            else if (c.moveToPosition(record_position)){     
                c.moveToNext();
                record_position = c.getPosition();
                DisplayContact(c);
            }
            else {
                if(c.moveToFirst()){
                    record_position = c.getPosition();
                    DisplayContact(c);
                }
            }
            db.close();
            break;
4

3 回答 3

0

只需将您的 Cursor 转换为全局变量并在适当的位置对其进行初始化:

c = db.getAllContacts();

然后在您的 onClick 上执行以下操作:

 ...
if (c.moveToNextt()) {
    DisplayContact(c);
}
...
于 2013-05-25T08:16:31.213 回答
0

仅显示最后一个值,因为您的 while 循环会DisplayContacts一次又一次地调用该函数。只有在使用 final(last) 设置的值设置这些 TextView 后,循环才会退出 DisplayContacts。这就是为什么您只看到上次调用时设置的值的原因。How to Display next and previous records on click on next button in Java question中的人做错了同样的事情。如果您通读这些答案,可能会对您有所帮助。

单击下一步按钮获取下一个值的一种简单方法如下:

-> 在函数之外声明数据库功能onClick(可能在 onCreate 或使用 AsyncTask)。这将阻止您一次又一次地访问数据库,因为拨打电话可能很昂贵。

-> 然后以 的形式获取结果ArrayList并在单击下一个按钮时对其进行迭代。

希望这能让您对如何处理它有所了解。

于 2013-05-25T07:43:34.647 回答
0

您需要跟踪您所在的记录并将其加一。

int record_position = -1;

public void onClick(View v) {
    switch (v.getId()) {
    case R.id.Button01:
        // Get all contacts
        db.open();
        Cursor c = db.getAllContacts();
        if (record_position == -1){
            if (c.moveToFirst()) {
                record_position = c.getPosition();
                DisplayContact(c);
            }
        }
        else if (c.moveToPosition(record_position+1))            
            record_position = c.getPosition();
            DisplayContact(c);
        }
        else {
            if(c.moveToFirst){
                record_position = c.getPosition();
                DisplayContact(c);
            }
        }
        db.close();
        break;
    }

}
于 2013-05-25T07:45:20.987 回答