如何在Android应用程序中将编辑文本中的数据插入到sqlite数据库

问题描述 投票:0回答:1

我目前正在开发一个Android应用程序,我必须将新用户注册到sqlite db中,用户将他们的详细信息输入到editText中,我们需要fectch输入的数据并将其存储在db中

问题是,当我用硬编码数据尝试它时,它工作得很好。

DBHelper.java

package com.example.db;

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

public class DBHelper extends SQLiteOpenHelper {
    public static final String  DBNAME = "login.db";

    public DBHelper(Context context) {
        super(context, DBNAME, null, 1);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create TABLE users(unsername TEXT primary key,password TEXT,fullName TEXT,email TEXT,phone TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop Table if exists users");
    }

    public void insertData(String username, String password, String fullName, String email,String phone) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("unsername",username);
        contentValues.put("password",password);
        contentValues.put("fullName",fullName);
        contentValues.put("email",email);
        contentValues.put("phone",phone);

    }
}


这里是signup.java活动

package com.example.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityOptionsCompat;
import androidx.core.graphics.Insets;
import androidx.core.util.Pair;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import com.google.android.material.textfield.TextInputLayout;



public class SignUpPage extends AppCompatActivity {

    // Varaible
    Button loginbtn, signupbtn;
    ImageView logo;
    TextInputLayout uname, pass, mail, phoneNo, fname;

    FirebaseDatabase rootNode;
    DatabaseReference reference;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_sign_up_page);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        loginbtn = findViewById(R.id.loginBtn);
        signupbtn = findViewById(R.id.signUpBtn);
        logo = findViewById(R.id.logo);
        uname = findViewById(R.id.username);
        pass = findViewById(R.id.pwd);
        phoneNo = findViewById(R.id.phone);
        mail = findViewById(R.id.email);
        fname = findViewById(R.id.name);

        String username = uname.getEditText().getText().toString();
        String password = pass.getEditText().getText().toString();
        String fullNmae = fname.getEditText().getText().toString();
        String email = mail.getEditText().getText().toString();
        String phone = phoneNo.getEditText().getText().toString();


        DBHelper dbHelper = new DBHelper(this);

        loginbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SignUpPage.this, LoginPage.class);
                Pair[] pair = new Pair[3];
                pair[0] = new Pair<View, String>(logo, "logo_img");
                pair[1] = new Pair<View, String>(loginbtn, "sign_up_in");
                pair[2] = new Pair<View, String>(signupbtn, "back_sign_up_in");

                ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(SignUpPage.this, pair);
                startActivity(intent, options.toBundle());
            }
        });

        signupbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    boolean insert =  dbHelper.insertData(username,password,fullNmae,email,phone);
                    if (insert)
                    {
                        Toast.makeText(SignUpPage.this,"Inserted",Toast.LENGTH_LONG).show();
                    }else {
                        Toast.makeText(SignUpPage.this,"not inserted",Toast.LENGTH_LONG).show();
                    }
                

            }
        });


    }

}

这里所有像uname,fname,pass这样的id都是TextInputLayout,其中存在TextInputEditText

如上所述,当我尝试将“用户名”作为 chard 编码字符串传递时,该函数工作正常

 String[] usernames = {"john_doe", "jane_smith", "bob_jackson"};
        String[] passwords = {"StrongPassword123", "SecurePass456", "Pa$$w0rd789"};
        String[] fullNames = {"John Doe", "Jane Smith", "Bob Jackson"};
        String[] emails = {"[email protected]", "[email protected]", "[email protected]"};
        String[] phones = {"123-456-7890", "987-654-3210", "555-123-4567"};

        DBHelper dbHelper = new DBHelper(this);

// Insert data into the database
        for (int i = 0; i < usernames.length; i++) {
            dbHelper.insertData(usernames[i], passwords[i], fullNames[i], emails[i], phones[i]);
        }

我想要的是,当用户在单击注册 btn 时在 TextInputEditText 中输入详细信息时,所有数据应存储在 String 变量中,并且应调用 dbinsert 函数将所有数据插入 db

android android-sqlite sqliteopenhelper
1个回答
0
投票

您需要在按下按钮时读取输入值,而不是在

onCreate()
中。因此,将
input.getEditText().getText().toString()
代码移到
onClick()
下,例如:

signupbtn.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    String username = uname.getEditText().getText().toString();
    String password = pass.getEditText().getText().toString();
    String fullNmae = fname.getEditText().getText().toString();
    String email = mail.getEditText().getText().toString();
    String phone = phoneNo.getEditText().getText().toString();
    
    // ...
    boolean insert =  dbHelper.insertData(username,password,fullNmae,email,phone);
    // ...
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.