java - 当我编写代码以通过ListView {在content_main.xml}中创建联系人列表(如联系人 View )时发生错误

标签 java android sqlite listview compiler-errors

我正在编写代码以像联系人 View 一样通过ListView {in content_main.xml}创建显示列表。
我在(SQLite Expert Professional)中使用一个表(名称:“contact”)构建了一个数据库,该表包含一些名称,家庭和数字,并带有ID,NAME,fAMILY和PHONE NUMBER列。
ID是唯一的,自动递增和主键...其他是文本,除了数字是CHAR。
然后我将它们调用到我的ListView中,如下所示。(在此之前,我进行了row_list Activity 以使自己的listview成为自定义对象),但是出现错误,我找不到它。
{我可以在源数据文件中找到带有该表的database.db文件,这意味着我的错误不是由创建数据库引起的。}
请帮助我。我想学习android(以最快的速度)来获得一个工作,我需要它。

错误.Android Monitor.Logcat

09-08 05:27:32.005 5692-5692/? W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x94c4fb20)
09-08 05:27:32.005 5692-5692/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: mizco.phonebook, PID: 5692
java.lang.RuntimeException: Unable to start activity ComponentInfo{mizco.phonebook/mizco.phonebook.Main}: android.database
.CursorIndexOutOfBoundsException: Index 5 requested, with a size of 5
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2193)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2243)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5019)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.CursorIndexOutOfBoundsException: Index 5 requested, with a size of 5
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
at mizco.phonebook.database.getfulllist(database.java:97)
at mizco.phonebook.Main.onCreate(Main.java:36)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2157)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2243)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5019)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)

Main.java
package mizco.phonebook;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
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 Main extends AppCompatActivity {
    private database db;
    private String [][] res ;

    private ListView list;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    list = (ListView) findViewById(R.id.main_list);

    db = new database(this);
    db.startusing();

    db.open();
    res = db.getfulllist();
    db.close();


    list.setAdapter(new AA());


    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        }
    });

}


class AA extends ArrayAdapter<String>{

    public AA() {

        super(Main.this, R.layout.row_list, res[0]);
    }
    @NonNull
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        LayoutInflater in = getLayoutInflater();
        View row = in.inflate(R.layout.row_list,parent,false);

        TextView name = (TextView) row.findViewById(R.id.row_name);
        TextView number = (TextView) row.findViewById(R.id.row_number);

        name.setText(res[0][position]+" "+res[1][position]);
        number.setText(res[2][position]);
        return row;
    }
}

}

类:database.java
package mizco.phonebook;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

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

/**
 * Created by Mahdi on 9/2/2017.
 */

public class database extends SQLiteOpenHelper {

public static String dbname= "database";
public static String dbpath="";
private Context mctxt;

private SQLiteDatabase mydb;


public database(Context context) {
    super(context, dbname, null, 1);
    mctxt = context;
}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {

}

private boolean existdatabase(){
    File m312 = new File(dbpath+dbname);

        return m312.exists();
}


private void copydatabase(){
    try {
        InputStream IS = mctxt.getAssets().open(dbname);
        OutputStream OS = new FileOutputStream(dbpath+dbname);


        byte[] buffer = new byte[1024];
        int length;

        while ((length = IS.read(buffer))>0){
         OS.write(buffer,0,length);
        }
        OS.flush();
        OS.close();
        IS.close();

    } catch (Exception e) {
    }
}

public void open(){
    mydb = SQLiteDatabase.openDatabase(dbpath+dbname, null, SQLiteDatabase.OPEN_READWRITE);
}

public void close(){
    mydb.close();
}




public void startusing () {
    dbpath = mctxt.getFilesDir().getParent() + "/databases/";
    if (!existdatabase()) {
        this.getWritableDatabase();
        copydatabase();
    }
}

public String[][] getfulllist(){


    Cursor cu = mydb.rawQuery("select * from Contact",null);

    String [][] r = new String[3][cu.getCount()];
    for (int i= 0;i<=cu.getCount();i++){
        cu.moveToPosition(i);

        r[0][i]=cu.getString(1);
        r[1][i]=cu.getString(2);
        r[2][i]=cu.getString(3);
    }

    return r;
}

}

最佳答案

您正在离开游标的末尾。您的代码应阅读

for (int i= 0;i < cu.getCount();i++){
        cu.moveToPosition(i);

        r[0][i]=cu.getString(1);
        r[1][i]=cu.getString(2);
        r[2][i]=cu.getString(3);
    }
return r;

关于java - 当我编写代码以通过ListView {在content_main.xml}中创建联系人列表(如联系人 View )时发生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46117790/

相关文章:

java - 访问其他 Java 进程

Android studio安装警告: A folder failed to be moved

sqlite - 如何使用 SQLite3 导入 tsv 文件

android - android 4.2 中的 Butterknife Nullpointer 异常

sqlite - 能够控制 INTEGER 类型的字节大小

python - 如何在 SQLAlchemy 中过滤列上的 SQL 查询?

java - Android:在各个 TextView 中使用 stringrequest 的结果

java - 使用 Thymeleaf onclick 调用服务方法

java - ReactiveSecurityContextHolder#getContext 返回一个空上下文

android - 更改 ViewPager 的计数