简体   繁体   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;
    }

Hi everyone!大家好! I'm new in the world of Java and Android Studio.我是 Java 和 Android Studio 领域的新手。 I don't know how to transmit data from the databse created in the second Activity to the first one.我不知道如何将数据从第二个 Activity 创建的数据库传输到第一个。 I need help checking if the email and password that the user puts on the first Activity (MainActivity) already exists in the database I created in the second Activity (BancoDados_Registo).我需要帮助检查用户在第一个活动 (MainActivity) 上输入的电子邮件和密码是否已经存在于我在第二个活动 (BancoDados_Registo) 中创建的数据库中。 Thank you for your attention in advance!提前感谢您的关注!

Here's a working example (but one that uses the deprecated startActivityForresult) based upon your code.这是一个基于您的代码的工作示例(但使用已弃用的 startActivityForresult 的示例)。

When the App is started MainActivity displays the login/registo buttons:-当应用程序启动时,MainActivity 显示登录/注册按钮:-

在此处输入图像描述

  • note hints added for email and password just to show where the TextViews.为电子邮件和密码添加的注释提示只是为了显示 TextViews 的位置。

Clicking the Registo button starts the Registo activity with empty EditTexts for the nome,email,password morada and telemovel and a button to register (add) :-单击 Registo 按钮启动 Registo 活动,其中名称、电子邮件、密码 morada 和 telemovel 的空 EditTexts 以及注册(添加)按钮:-

在此处输入图像描述

Entering suitable data eg :-输入合适的数据,例如:-

在此处输入图像描述

And then clicking the Registo button, adds the user (if not a duplicate) and returns to MainActivity passing the nome and rowid which is then used to complete the email and password TextViews (not that you would do this, but rather to show extracting the data from the database) :-然后单击 Registo 按钮,添加用户(如果不是重复的)并返回 MainActivity,传递名称和 rowid,然后用于完成电子邮件和密码 TextViews(不是你会这样做,而是显示提取来自数据库的数据):-

在此处输入图像描述

The code:-编码:-

MainActivty主要活动

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 (changed/added methods only) :- 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 activity (note capitalised) :- 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.

相关问题 从不同的Activity Android插入sqlite db - Inserting to sqlite db from different Activities Android 如何使用 android 工作室中的两个活动在 sqlite 数据库中创建两个表 - How to create two tables in a sqlite database using two activities in android studio Android Studio:1个按钮中2个不同的活动 - Android Studio: 2 different activities in 1 button 如何在不同活动的android studio中加密/解密文本 - how to encrypt/decrypt text in android studio on different activities 如何使用库SQLite在Android Studio中保存数据? - How can I save data in Android Studio using the library SQLite? 如何从android studio中的recycler视图将数据添加到SQLite数据库中 - How to add data into SQLite database from recycler view in android studio Android Studio,如何从Sqlite数据库中检索数据并将其显示到textview中? - Android Studio, how to retrieve data from Sqlite database and display it into textview? Android重用不同数据的活动 - Android Reusing activities with different data 在不同的活动中将数据从ListView传递到TextView,Android - Passing Data from ListView To TextView in different Activities, Android Android Studio计时表通过不同活动的时间 - Android Studio chronometer time through different activities
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM