Issue
I'm trying to set my data from Intent putExtra from one Activity to another, but when the data is access to update, the display instead of being the show input data, is a code with id of the string. The data is displaying normally on my recyclerView. I using a database with SQLite. I've tried lots of things but nothing worked. Can anyone help me?
My Adapter:
package com.myapplication.umdocededaisy;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {
private Context context;
private Activity activity;
private RecyclerView recyclerView;
CustomAdapter(Context context, Activity activity, List<MateriaPrima> listaProdutos, RecyclerView recyclerView) {
this.context = context;
this.activity = activity;
this.listaProdutos = listaProdutos;
this.recyclerView = recyclerView;
}
List<MateriaPrima> listaProdutos;
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.ingredientes, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull CustomAdapter.MyViewHolder holder, int position) {
holder.txtId.setText(String.valueOf(listaProdutos.get(position).getCodigo()));
holder.txtProduto.setText(String.valueOf(listaProdutos.get(position).getProduto()));
holder.txtValor.setText(String.valueOf(listaProdutos.get(position).getValor()));
holder.txtQtd.setText(String.valueOf(listaProdutos.get(position).getQuantidade()));
holder.txtTipo.setText(String.valueOf(listaProdutos.get(position).getTipo()));
holder.mainLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context,UpdateActivity.class);
intent.putExtra("codigo", listaProdutos.get(position).toString());
intent.putExtra("produto", listaProdutos.get(position).toString());
intent.putExtra("valor", String.valueOf(listaProdutos.get(position)));
intent.putExtra("quantidade", String.valueOf(listaProdutos.get(position)));
intent.putExtra("tipo", String.valueOf(listaProdutos.get(position)));
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return listaProdutos.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView txtId, txtProduto, txtValor, txtQtd, txtTipo;
LinearLayout mainLayout;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
txtId = itemView.findViewById(R.id.txtId);
txtProduto = itemView.findViewById(R.id.txtProduto);
txtValor = itemView.findViewById(R.id.txtValor);
txtQtd = itemView.findViewById(R.id.txtQtd);
txtTipo = itemView.findViewById(R.id.txtTipo);
mainLayout = itemView.findViewById(R.id.mainLayout);
}
}
}
Update Activity:
package com.myapplication.umdocededaisy;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class UpdateActivity extends AppCompatActivity {
EditText editCodigo2, editProduto2, editValor2, editQuantidade2, editTipo2;
Button btnUpdate;
String codigo, produto, valor, quantidade, tipo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update);
//Declarações objetos:
editCodigo2 = findViewById(R.id.editCodigo2);
editProduto2 = findViewById(R.id.editProduto2);
editValor2 = findViewById(R.id.editValor2);
editQuantidade2 = findViewById(R.id.editQuantidade2);
editTipo2 = findViewById(R.id.editTipo2);
btnUpdate = findViewById(R.id.btnUpdate);
getAndSetIntentData();
btnUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
void getAndSetIntentData() {
if (getIntent().hasExtra("codigo") && getIntent().hasExtra("produto") && getIntent().hasExtra("valor") &&
getIntent().hasExtra("quantidade") && getIntent().hasExtra("tipo")){
//Getting data:
codigo = getIntent().getStringExtra("codigo");
produto = getIntent().getStringExtra("produto");
valor = getIntent().getStringExtra("valor");
quantidade = getIntent().getStringExtra("quantidade");
tipo = getIntent().getStringExtra("tipo");
//Setting data:
editCodigo2.setText(codigo);
editProduto2.setText(produto);
editValor2.setText(valor);
editQuantidade2.setText(quantidade);
editTipo2.setText(tipo);
}else{
Toast.makeText(this, R.string.strData0, Toast.LENGTH_SHORT).show();
}
}
}
My Database:
package com.myapplication.umdocededaisy;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MyDatabase extends SQLiteOpenHelper {
List<MateriaPrima> listaProduto = new ArrayList<>();
private final Context context;
private static final String DATABASE_NAME = "BancoDoceDaisy.db";
private static final int DATABASE_VERSION = 3;
//Estruturas das Tabelas do banco de dados:
//Tabela dos produtos - materia prima:
private static final String TABLE_PRODUTO = "materia_prima";
private static final String COLUMN_CODIGO = "codigo";
private static final String COLUMN_PRODUTO = "produto";
private static final String COLUMN_VALOR = "valor";
private static final String COLUMN_QTD = "quantidade";
private static final String COLUMN_TIPO = "tipo";
public MyDatabase(Context context) {
super(context, DATABASE_NAME,null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
String query = "CREATE TABLE "+ TABLE_PRODUTO +
" (" + COLUMN_CODIGO + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_PRODUTO + " TEXT, " +
COLUMN_VALOR + " FLOAT, " +
COLUMN_QTD + " FLOAT, " +
COLUMN_TIPO + " TEXT); ";
db.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + "materia_prima");
onCreate(db);
}
void addMateriaPrima(MateriaPrima materiaPrima) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_PRODUTO, materiaPrima.getProduto());
cv.put(COLUMN_VALOR, materiaPrima.getValor());
cv.put(COLUMN_QTD, materiaPrima.getQuantidade());
cv.put(COLUMN_TIPO, materiaPrima.getTipo());
long result = db.insert(TABLE_PRODUTO, null, cv);
if (result == -1) {
Toast.makeText(context, R.string.strFailed, Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(context, R.string.strAddSucess, Toast.LENGTH_SHORT).show();
}
db.close();
}
Cursor readAllData(){
String query = "SELECT * FROM " + TABLE_PRODUTO;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = null;
if(db != null){
cursor = db.rawQuery(query,null);
}
return cursor;
}
public List<MateriaPrima> buscaProduto() {
String columns[] = {COLUMN_CODIGO, COLUMN_PRODUTO, COLUMN_VALOR, COLUMN_QTD, COLUMN_TIPO};
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(TABLE_PRODUTO, columns, null, null, null,null, null);
while (cursor.moveToNext()) {
int index1 = cursor.getColumnIndex(COLUMN_CODIGO);
int codigo = cursor.getInt(index1);
int index2 = cursor.getColumnIndex(COLUMN_PRODUTO);
String produto = cursor.getString(index2);
int index3 = cursor.getColumnIndex(COLUMN_VALOR);
float valor = cursor.getFloat(index3);
int index4 = cursor.getColumnIndex(COLUMN_QTD);
float quantidade = cursor.getFloat(index4);
int index5 = cursor.getColumnIndex(COLUMN_TIPO);
String tipo = cursor.getString(index5);
MateriaPrima produtos = new MateriaPrima(codigo, produto, valor, quantidade, tipo);
listaProduto.add(produtos);
}
return listaProduto;
}
}
Solution
In every
intent.putExtra("####", listaProdutos.get(position).toString());
You are missing calling the value get###
before converting .toString()
. Your intent should look like:
Intent intent = new Intent(context,UpdateActivity.class);
intent.putExtra("codigo", listaProdutos.get(position).getCodigo().toString());
intent.putExtra("produto", listaProdutos.get(position).getProduto().toString());
intent.putExtra("valor", String.valueOf(listaProdutos.get(position).getValor()));
intent.putExtra("quantidade", String.valueOf(listaProdutos.get(position).getQuantidade()));
intent.putExtra("tipo", String.valueOf(listaProdutos.get(position).getTipo()));
context.startActivity(intent);
Answered By - javdromero
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.