'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. I don't know how to transmit data from the databse created in the second Activity to the first one. 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). Thank you for your attention in advance!



Solution 1:[1]

Here's a working example (but one that uses the deprecated startActivityForresult) based upon your code.

When the App is started MainActivity displays the login/registo buttons:-

enter image description here

  • note hints added for email and password just to show where the 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) :-

enter image description here

Entering suitable data e.g. :-

enter image description here

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) :-

enter image description here

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) :-

   // 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) :-

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();
                }
            }
        });

    }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 MikeT