【问题标题】:How to show multiple data from SQLite database inside ListView in Android如何在 Android 的 ListView 中显示 SQLite 数据库中的多个数据
【发布时间】:2020-01-22 14:21:02
【问题描述】:

我是 Android 开发的新手。

我不知道如何让 Android Studio 只获取我的 SQLite 数据库中的内容并将其内容粘贴到列表视图中。我认为在记录输出后会有一种简单的方法,但可以在 ListView 中显示数据库中的所有内容,但它似乎以不同的方式进行。

    public class MainActivity extends AppCompatActivity {

    EditText nameEditText;
    EditText phoneEditText;
    ListView updateListView;

    SQLiteDatabase sqLiteDatabase;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        nameEditText = findViewById(R.id.nameEditText);
        phoneEditText = findViewById(R.id.phoneEditText);
        updateListView = findViewById(R.id.updatedListView);



        sqLiteDatabase = this.openOrCreateDatabase("Contact", MODE_PRIVATE, null);

        sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS users(name VARCHAR, phone INT(11),id INTEGER PRIMARY KEY)");


    }


    public void OnClick(View view) {


        if (nameEditText.equals("") || phoneEditText.equals("")) {
            Toast.makeText(this, "Fields shouldn't be empty", Toast.LENGTH_SHORT).show();
        } else {

            sqLiteDatabase.execSQL("INSERT INTO users(name, phone) VALUES('" + nameEditText.getText().toString() + "','" + phoneEditText.getText().toString() + "')");

            Cursor c = sqLiteDatabase.rawQuery("SELECT * FROM users", null);
            int nameIndex = c.getColumnIndex("name");
            int phoneIndex = c.getColumnIndex("phone");
            int idIndex = c.getColumnIndex("id");
            if (c != null && c.getCount() > 0) {
                c.moveToFirst();
                for (int i = 0; i < c.getCount(); i++) {
                    String str = c.getString(0);

                    String UpdatedList = (c.getString(nameIndex));
                    String phonelist = (c.getString(phoneIndex));

                    String list = (UpdatedList+phonelist);
                    ArrayList<String> arrayList = new ArrayList<String>(Integer.parseInt(list));
                    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,arrayList);
                    updateListView.setAdapter(arrayAdapter);              


                    Log.i("User Name", c.getString(nameIndex));
                    Log.i("userResults - age", Integer.toString(c.getInt(phoneIndex)));
                    Log.i("userResults - id", Integer.toString(c.getInt(idIndex)));
                    c.moveToNext();
                }




            }
        }
    }
    }

我的日志输入

2020-01-22 20:22:48.353 28783-28783/? D/AndroidRuntime: Shutting down VM
2020-01-22 20:22:48.357 28783-28783/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.mysqlapp, PID: 28783
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
        at android.view.View.performClick(View.java:6669)
        at android.view.View.performClickInternal(View.java:6638)
        at android.view.View.access$3100(View.java:789)
        at android.view.View$PerformClick.run(View.java:26145)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6898)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
        at android.view.View.performClick(View.java:6669) 
        at android.view.View.performClickInternal(View.java:6638) 
        at android.view.View.access$3100(View.java:789) 
        at android.view.View$PerformClick.run(View.java:26145) 
        at android.os.Handler.handleCallback(Handler.java:873) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6898) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
     Caused by: java.lang.NumberFormatException: For input string: ""
        at java.lang.Integer.parseInt(Integer.java:627)
        at java.lang.Integer.parseInt(Integer.java:650)
        at com.example.mysqlapp.MainActivity.OnClick(MainActivity.java:65)

【问题讨论】:

  • 您能否详细说明您的问题/查询??
  • 第一个nameEditText.equals("")检查空编辑文本的方法错误,改用这个nameEditText.getText().toString().trim().equals("")
  • 尝试在此处发布您的activity_main.xml 错误提示无法执行按钮的onClick 功能
  • 最好为您的 sqlite 事务创建一个数据库助手类。它简单、整洁、舒适。

标签: java android android-studio android-listview


【解决方案1】:

在你从sql声明整个arrayList之后,在for循环之外调用setAdapter方法

【讨论】:

  • Madonabuli:我们鼓励这里的帮助者在答案中写出不止一个句子。非常短的贡献作为 cmets 更好(如果你更喜欢短的贡献,你只需要 50 声望点就可以做到这一点)。审核队列有时会删除非常简短或不清楚的答案。
  • @Shivas:尽管我对 Madonabulia 提出了建议,但“不工作”并不是一个有用的回应。只有你可以看到你的屏幕,所以你需要让你的助手知道它如何不起作用。你能做些什么观察?你看到任何错误吗?如果您只是说“它不起作用”,那么其他人就会有责任向您提出更多问题,届时他们会猜测您需要做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多