繁体   English   中英

如何在 Android Studio 上使用 SQLite 比较来自不同活动的数据

[英]How to compare data from different activities using SQLite on Android Studio

//MAIN ACTIVITY
package com.example.saosteste2;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    
    
    public class MainActivity extends AppCompatActivity {
    
        private BancoDados_Registo dbManager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            dbManager = new BancoDados_Registo(MainActivity.this);
    
    
            TextView email = (TextView) findViewById(R.id.id_email);
            TextView password = (TextView) findViewById(R.id.id_password);
            Button BLogIn = (Button) findViewById(R.id.id_Blogin);
            Button conta_btn = (Button) findViewById(R.id.id_criarconta);
    
            //testing email e password
            BLogIn.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // ????
                }
       
            });
    
    
            conta_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this, registo.class);
                    startActivity(intent);
    
                }
            });
    
        }
    }

//-----------------------SECOND ACTIVITY WITH THE DATABASE-----------------------//
//BANCODADOS_REGISTOS
package com.example.saosteste2;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;

import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;

public class BancoDados_Registo extends SQLiteOpenHelper {

    public BancoDados_Registo(Context context) {
        super(context, "REGISTOS.db", null, 1);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create Table Registos(nome TEXT primary key, email TEXT, password TEXT, morada TEXT, telemovel TEXT)");
    }

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

    }

    // INSERT DATA
    public Boolean insertuserdata(String nome, String email, String password, String morada, String telemovel){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();

        contentValues.put("nome", nome);
        contentValues.put("email", email);
        contentValues.put("password", password);
        contentValues.put("morada", morada);
        contentValues.put("telemovel", telemovel);
        long result=db.insert("Registos", null, contentValues);
        if (result==-1){ //se o insert falhar
            return false;
        }else{
            return true;
        }
    }

    //UPDATE DATA
    public Boolean updateuserdata(String nome, String email, String password, String morada, String telemovel){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();

        contentValues.put("nome", nome);
        contentValues.put("email", email);
        contentValues.put("password", password);
        contentValues.put("morada", morada);
        contentValues.put("telemovel", telemovel);
        Cursor cursor = db.rawQuery("Select * from Registos where nome = ?", new String[] {nome});
        if (cursor.getCount()>0){ //se o cursor tiver dados
            long result=db.update("Registos", contentValues, "nome=?", new String [] {nome});
            if (result==-1){ //se o insert falhar
                return false;
            }else{
                return true;
            }
        }else {
            return false;
        }
    }

    //DELETEDATA
    public Boolean deleteuserdata(String nome){
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery("Select * from Registos where nome = ?", new String[] {nome});
        if (cursor.getCount()>0){ //se o cursor tiver dados
            long result=db.delete("Registos", "nome=?", new String [] {nome});
            if (result==-1){ //se o insert falhar
                return false;
            }else{
                return true;
            }
        }else {
            return false;
        }
    }


    public Cursor getuserdata(String email, String password){
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery("Select * from Registos", null);
        return cursor;
    }

大家好! 我是 Java 和 Android Studio 领域的新手。 我不知道如何将数据从第二个 Activity 创建的数据库传输到第一个。 我需要帮助检查用户在第一个活动 (MainActivity) 上输入的电子邮件和密码是否已经存在于我在第二个活动 (BancoDados_Registo) 中创建的数据库中。 提前感谢您的关注!

这是一个基于您的代码的工作示例(但使用已弃用的 startActivityForresult 的示例)。

当应用程序启动时,MainActivity 显示登录/注册按钮:-

在此处输入图像描述

  • 为电子邮件和密码添加的注释提示只是为了显示 TextViews 的位置。

单击 Registo 按钮启动 Registo 活动,其中名称、电子邮件、密码 morada 和 telemovel 的空 EditTexts 以及注册(添加)按钮:-

在此处输入图像描述

输入合适的数据,例如:-

在此处输入图像描述

然后单击 Registo 按钮,添加用户(如果不是重复的)并返回 MainActivity,传递名称和 rowid,然后用于完成电子邮件和密码 TextViews(不是你会这样做,而是显示提取来自数据库的数据):-

在此处输入图像描述

编码:-

主要活动

public class MainActivity extends AppCompatActivity {

    private BancoDados_Registo dbManager;
    TextView email; //<<<<< MOVED for full scope
    TextView password; //<<<<< Moved for full scope

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

        dbManager = new BancoDados_Registo(MainActivity.this);


        email = (TextView) findViewById(R.id.id_email);
        password = (TextView) findViewById(R.id.id_password);
        Button BLogIn = (Button) findViewById(R.id.id_Blogin);
        Button conta_btn = (Button) findViewById(R.id.id_criarconta);

        //testing email e password
        BLogIn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // ????
            }

        });

        conta_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, Registo.class);
                startActivityForResult(intent,Registo.REGISTO_RESULTSCODE); // deprecated but works
            }
        });
    }

    @SuppressLint("Range")
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == Registo.REGISTO_RESULTSCODE && resultCode == RESULT_OK) {
            Toast.makeText(this,"Registered with ID " + data.getLongExtra(Registo.INTENTEXTRAKEY_REGISTOID,-1),Toast.LENGTH_LONG).show();
            if (data.getLongExtra(Registo.INTENTEXTRAKEY_REGISTOID,-1) > 0) {
                Cursor csr = dbManager.getUserDataByNome(data.getStringExtra(Registo.INTENTEXTRAKEY_REGISTONOME));
                if (csr.moveToFirst()) {
                    password.setText(csr.getString(csr.getColumnIndex("password")));
                    email.setText(csr.getString(csr.getColumnIndex("email")));
                }
            }
        }
    }
}

BancoDados_Registo (仅限更改/添加的方法):-

   // INSERT DATA <<<<< CHANGED (to return rowid which can be more useful as it can be used to get the row)
   public Long insertuserdata(String nome, String email, String password, String morada, String telemovel) {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();

      contentValues.put("nome", nome);
      contentValues.put("email", email);
      contentValues.put("password", password);
      contentValues.put("morada", morada);
      contentValues.put("telemovel", telemovel);
      return db.insert("Registos", null, contentValues);
   }

   /* ADDED to get User just by nome */
   public Cursor getUserDataByNome(String nome) {
      SQLiteDatabase db = this.getWritableDatabase();
      return db.query("Registos",null,"nome=?",new String[]{nome},null,null,null);
   }

Registo活动(注意大写):-

public class Registo extends AppCompatActivity {


    private BancoDados_Registo dbManager;
    public static final int REGISTO_REQUESTCODE = 98; //<<<
    public static final String INTENTEXTRAKEY_REGISTOID = "ie_registo_id";
    public static final String INTENTEXTRAKEY_REGISTONOME = "ie_registo_nome";

    EditText nome;
    EditText email;
    EditText password;
    EditText morada;
    EditText telemovel;
    Button registro;


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

        nome = this.findViewById(R.id.id_nome);
        email = this.findViewById(R.id.id_email);
        password = this.findViewById(R.id.id_password);
        morada = this.findViewById(R.id.id_morada);
        telemovel = this.findViewById(R.id.id_telemovel);
        registro = (Button) findViewById(R.id.id_registro);

        dbManager = new BancoDados_Registo(this);

        registro.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                /* Only insert in valid data - else Toast incomplete*/
                if (

                        email.getText().length() > 0
                                && password.getText().length() >= 8
                                && morada.getText().length() > 0
                        && telemovel.getText().length() > 0
                ) {
                    Long rowid = dbManager.insertuserdata(nome.getText().toString(),email.getText().toString(),password.getText().toString(),morada.getText().toString(),telemovel.getText().toString());
                    if (rowid > 0) {
                        Toast.makeText(view.getContext(),"Registered",Toast.LENGTH_LONG).show();
                        Intent resultIntent = new Intent();
                        resultIntent.putExtra(INTENTEXTRAKEY_REGISTOID,rowid);
                        resultIntent.putExtra(INTENTEXTRAKEY_REGISTONOME,nome.getText().toString());
                        setResult(RESULT_OK,resultIntent);
                        finish();

                    } else {
                        Toast.makeText(view.getContext(),"Not Registered (duplicate)",Toast.LENGTH_LONG).show();
                    }
                } else {
                    Toast.makeText(view.getContext(),"Not Registered Incomplete input fields!!",Toast.LENGTH_LONG).show();
                }
            }
        });

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM