How to set a string coming from a sqlite database to display in a Textview?

Asked

Viewed 103 times

2

I’m trying to display a string value in a textview via a query in sqlite, but when I run the code a numeric log of the Android sqlite class is displayed randomly. I’m just trying to display the string as the field value in textview.

Follows class of database:

public class DatabaseHelper extends SQLiteOpenHelper {

//nome do banco de dados
public static final String DATABASE_NAME = "banco.db";

//tabelas referentes as seções de produtos
public static final String TABLE_1 = "produto_1";
public static final String TABLE_2 = "produto_2";
public static final String TABLE_3 = "produto_3";
public static final String TABLE_4 = "produto_4";
public static final String TABLE_5 = "produto_5";


//colunas da tabela de produto 1

public static final String TABLE_1_C_ID = "id_produto_1";
public static final String TABLE_1_C_QTD = "quantidade_produto_1";

//colunas da tabela de produto 2

public static final String TABLE_2_C_ID = "id_produto_2";
public static final String TABLE_2_C_QTD = "quantidade_produto_2";

//colunas da tabela de produto 3

public static final String TABLE_3_C_ID = "id_produto_3";
public static final String TABLE_3_C_QTD = "quantidade_produto_3";

//colunas da tabela de produto 4

public static final String TABLE_4_C_ID = "id_produto_4";
public static final String TABLE_4_C_QTD = "quantidade_produto_4";

//colunas da tabela de produto 5

public static final String TABLE_5_C_ID = "id_produto_5";
public static final String TABLE_5_C_QTD = "quantidade_produto_5";


public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
    SQLiteDatabase db = this.getWritableDatabase();
}

@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL(
            "create table "
            + TABLE_1
            + "(id_produto_1 INTEGER PRIMARY KEY AUTOINCREMENT, quantidade_produto_1 TEXT) "
    );

    db.execSQL(
            "create table "
                    + TABLE_2
                    + "(id_produto_2 INTEGER PRIMARY KEY AUTOINCREMENT, quantidade_produto_2 TEXT) "
    );

    db.execSQL(
            "create table "
                    + TABLE_3
                    + "(id_produto_3 INTEGER PRIMARY KEY AUTOINCREMENT, quantidade_produto_3 TEXT) "
    );

    db.execSQL(
            "create table "
                    + TABLE_4
                    + "(id_produto_4 INTEGER PRIMARY KEY AUTOINCREMENT, quantidade_produto_4 TEXT) "
    );

    db.execSQL(
            "create table "
                    + TABLE_5
                    + "(id_produto_5 INTEGER PRIMARY KEY AUTOINCREMENT, quantidade_produto_5 TEXT) "
    );

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    db.execSQL(
            "DROP TABLE IF EXISTS " + TABLE_1 + TABLE_2 + TABLE_3 + TABLE_4 + TABLE_5);
    onCreate(db);
}


//insere dados na tabela 1

public boolean insereDados_na_TABLE_1(String quantidade_1)
{
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValue = new ContentValues();
    contentValue.put(TABLE_1_C_QTD , quantidade_1);
    long resultado = db.insert(TABLE_1, null, contentValue);
    if(resultado == -1)
        return false;
    else
        return true;
}

//insere dados na tabela 2

public boolean insereDados_na_TABLE_2(String quantidade_2)
{
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValue = new ContentValues();
    contentValue.put(TABLE_2_C_QTD, quantidade_2);
    long resultado = db.insert(TABLE_2, null, contentValue);
    if(resultado == -1)
        return false;
    else
        return true;
}

//insere dados na table 3

public boolean insereDados_na_TABLE_3(String quantidade_3)
{
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValue = new ContentValues();
    contentValue.put(TABLE_3_C_QTD, quantidade_3);
    long resultado = db.insert(TABLE_3, null, contentValue);
    if(resultado == -1)
        return false;
    else
        return true;
}

//insere dados na table 4

public boolean insereDados_na_TABLE_4(String quantidade_4)
{
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValue = new ContentValues();
    contentValue.put(TABLE_4_C_QTD, quantidade_4);
    long resultado = db.insert(TABLE_4, null, contentValue);
    if(resultado == -1)
        return false;
    else
        return true;
}

//insere dados na table 5

public boolean insereDados_na_TABLE_5(String quantidade_5)
{
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValue = new ContentValues();
    contentValue.put(TABLE_5_C_QTD, quantidade_5);
    long resultado = db.insert(TABLE_5, null, contentValue);
    if(resultado == -1)
        return false;
    else
        return true;
}

//////////////para pegar todos os dados inseridos

//table 1

public Cursor pegaTodosDados_1(){
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res1 = db.rawQuery("select * from " +TABLE_1+ " ORDER BY " + TABLE_1_C_ID + " DESC LIMIT 1", null);
    return res1;
    //res1.moveToLast(res1.toString());
}

follows the view:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:tools="http://schemas.android.com/tools"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical"
    tools:context=".produtoActivity"
    >

<TextView
   android:id="@+id/ProdutoSelecionado"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:textStyle="bold"
   android:textSize="18dp"

    />

    <TextView
   android:id="@+id/textView"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:text="@string/qtd" />

<EditText
    android:id="@+id/quantidade"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/apN"
    android:inputType="number" />

<Button
    android:id="@+id/btSalvar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/btSv" />

<TextView
    android:id="@+id/Registro"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text=""
    android:textFontWeight="bold"
    />

<Button
    android:id="@+id/btExibirRegistros"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/bt_exibirregistro" />

follows the Activity class in which I am trying to insert the string from the database:

import android.content.Intent;
import android.database.Cursor;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import static com.example.testegigaservices.testegigaservices.DatabaseHelper.DATABASE_NAME;
import static com.example.testegigaservices.testegigaservices.DatabaseHelper.TABLE_1_C_ID;
import static com.example.testegigaservices.testegigaservices.DatabaseHelper.TABLE_1_C_QTD;


public class produtoActivity extends AppCompatActivity {

    DatabaseHelper meuBD;

    public static final String EXTRA_PRODUTO = "extra_produto";

    public static String sobrevalor = "Ultimo valor salvo: ";

    private EditText mQuantidade;

    Button exibesql;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_produto);
        meuBD = new DatabaseHelper(this);

        //nomeia a activity
        Intent anterior = getIntent();
        final String stringTitle = anterior.getStringExtra(EXTRA_PRODUTO);
        this.setTitle(stringTitle);



        //pega o número digitado

        mQuantidade = (EditText)findViewById(R.id.quantidade);

        Button salvar = (Button)findViewById(R.id.btSalvar);

        final TextView registro = (TextView)findViewById(R.id.Registro);



        salvar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final String calculo = mQuantidade.getText().toString();

                if (!TextUtils.isEmpty(calculo)) {

                    mQuantidade.getText().clear();
                    Toast.makeText(getApplicationContext(), "Quantidade solicitada salva: " + calculo, Toast.LENGTH_SHORT).show();
                    registro.setText(sobrevalor + calculo);

                    //seleciona o valor e insere no banco de dados
                    boolean inserido = meuBD.insereDados_na_TABLE_1(calculo);

                    if (inserido = true) {

                        Toast.makeText(produtoActivity.this, "dados inseridos: " + calculo, Toast.LENGTH_SHORT).show();
                        String valor_final = "Valor final: " + inserido;
                    }
                    else{ Toast.makeText(produtoActivity.this , "dados não inseridos", Toast.LENGTH_SHORT).show();}



                } else {

                    Toast.makeText(getApplicationContext(), "Valor invalido ", Toast.LENGTH_SHORT).show();
                    Toast.makeText(getApplicationContext(), "Nenhuma alteração no banco de dados ", Toast.LENGTH_SHORT).show();
                    mQuantidade.getText().clear();
                }

                Button exibesql = (Button)findViewById(R.id.btExibirRegistros);

                final Cursor cursor1 = meuBD.pegaTodosDados_1();



                exibesql.setOnClickListener(
                        new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                    //fazer algo
                                if (meuBD.TABLE_1_C_ID != null)
                                {
                                    //Toast.makeText(produtoActivity.this, "não nulo, " + calculo, Toast.LENGTH_SHORT).show();
                                    Toast.makeText(produtoActivity.this, "não nulo, " + cursor1, Toast.LENGTH_SHORT).show();
                                    //registro.setText(String.format("Ultima quantidade: %s", cursor1));
                                    registro.setText(String.format("Ultima quantidade: %s" , cursor1));
                                }

                                else if (meuBD.TABLE_1_C_ID == null)
                                {
                                    Toast.makeText(produtoActivity.this, "Banco de dados vazio", Toast.LENGTH_SHORT).show();
                                }

                                else
                                {
                                    Toast.makeText(produtoActivity.this, "deu erro", Toast.LENGTH_SHORT).show();
                                }
                            }
                        }
                );


            }

        });
    }

}

and according to android studio, this is log by logcat of what I could understand by errors, or exceptions listed:

    10-25 15:07:06.203 4378-4378/? E/memtrack: Couldn't load memtrack module (No such file or directory)
10-25 15:07:06.203 4378-4378/? E/android.os.Debug: failed to load memtrack module: -2
10-25 15:07:50.913 4406-4406/com.example E/EGL_emulation: tid 4406: eglSurfaceAttrib(1199): error 0x3009 (EGL_BAD_MATCH)
10-25 15:07:51.953 4406-4406/com.example E/EGL_emulation: tid 4406: eglSurfaceAttrib(1199): error 0x3009 (EGL_BAD_MATCH)
10-25 15:22:00.013 1699-1699/com.android.systemui E/OpenGLRenderer:   GL_INVALID_OPERATION

1 answer

3


To get the data from Cursor, soon after making the select you should make a:

cursor.moveToFirst();

So it will go to the first index, to get the value of that index you do:

String texto = cursor.getString(cursor.getColumnIndex("Nome da coluna"));

To walk the Cursor if you have multiple records coming, you do:

Cursor c = db.rawQuery("select...");
c.moveToFirst();

for(int i = 0; i < c.getCount(); i++){
    String valor = c.getString(c.getColumnIndex("Nome da coluna"));
    c.moveToNext();

}

Remembering that when you finish working with your Cursor, you must close it:

cursor.close();

I’m sorry if my syntax is wrong, I’m writing from cell phone and without anything to base here kkkkk, just memory

  • 1

    Okay, I get the logic you’re trying to make. in this case, I used: record.setText(String.format("Last quantity: %s" , cursor1.getString(cursor1.getColumnIndex("quantity_product_1"))); .

  • 1

    That’s it, that’s it ;)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.