[ Foro de Java ]
Hola, soy novato como programador, estoy haciendo un programa para uso personal. Tengo problema en la línea que corresponde: "private void guardarModelos(String jsonModelos)", me sale el error que puse en el asunto de la pregunta. Les agradecería mucho si me pueden ayudar con este problema. Dejo aquí abajo el código para que le echéis una ojeada.
package com.example.gascontrol;
//import androidx.annotation.NonNull;
import android.widget.AdapterView.OnItemClickListener;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import android.os.Bundle;
import com.example.gascontrol.Modelo;
import com.example.gascontrol.AdaptadorLista;
import java.util.concurrent.TimeUnit;
import com.example.gascontrol.R;
public class MainActivity extends Activity {
private EditText editTextFecha;
private Button botonAgregarFecha;
//private Button botonGuardar;
private TextView textViewFechaIngresada;
private TextView textViewFechaActual;
private TextView textViewDiferenciaFechas;
private ListView listViewFechasGuardadas;
//esto es para guardar datos en el listview
private Button botonGuardar;
//private List <Modelo> listaModelos = new ArrayList<>();
//private void agregarModelo(String fechaIngresada, String fechaActual, String diferenciaFechas) {
//Modelo modelo = new Modelo(fechaIngresada, fechaActual, diferenciaFechas);
//listaModelos.add(modelo);
//}
//private ArrayList<Modelo> listaModelos = new ArrayList<>();
//-----------------------------------------
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
botonAgregarFecha = findViewById(R.id.boton_agregar_fecha);
editTextFecha = findViewById(R.id.edittext_fecha);
textViewFechaIngresada = findViewById(R.id.textViewFechaIngresada);
textViewFechaActual = findViewById(R.id.textViewFechaActual);
textViewDiferenciaFechas = findViewById(R.id.textViewDiferenciaFechas);
Button botonGuardar = (Button) findViewById(R.id.botonGuardar);
// Leer los valores guardados en SharedPreferences
SharedPreferences prefs = getSharedPreferences("MisPreferencias", Context.MODE_PRIVATE);
String fechaIngresada = prefs.getString("fechaIngresada", "");
String fechaActual = prefs.getString("fechaActual", "");
String diferenciaFechas = prefs.getString("diferenciaFechas", "");
// Mostrar los valores guardados en los TextView correspondientes
textViewFechaIngresada.setText(fechaIngresada);
textViewFechaActual.setText(fechaActual);
textViewDiferenciaFechas.setText(diferenciaFechas);
botonAgregarFecha.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Obtener fecha ingresada por el usuario
String fechaIngresada = editTextFecha.getText().toString();
// Obtener fecha actual
Date fechaActual = Calendar.getInstance().getTime();
SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");
String fechaActualFormateada = formatoFecha.format(fechaActual);
// Calcular diferencia de fechas
try {
Date fechaIngresadaDate = formatoFecha.parse(fechaIngresada);
long diferenciaEnMilisegundos = fechaActual.getTime() - fechaIngresadaDate.getTime();
long diferenciaEnDias = TimeUnit.MILLISECONDS.toDays(diferenciaEnMilisegundos);
String diferenciaFechasFormateada = String.valueOf(diferenciaEnDias) + " días";
textViewDiferenciaFechas.setText(diferenciaFechasFormateada);
// Guardar los valores en SharedPreferences
SharedPreferences prefs = getSharedPreferences("MisPreferencias", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("fechaIngresada", fechaIngresada);
editor.putString("fechaActual", fechaActualFormateada);
editor.putString("diferenciaFechas", diferenciaFechasFormateada);
editor.apply();
} catch (ParseException e) {
e.printStackTrace();
}
// Mostrar fechas en los TextView correspondientes
textViewFechaIngresada.setText(fechaIngresada);
textViewFechaActual.setText(fechaActualFormateada);
}
});
//////////////////////////////////////////////
final List<Modelo> listaModelos = new ArrayList<>();
final AdaptadorLista adaptador = new AdaptadorLista(this, listaModelos);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(adaptador);
// Obtener el objeto SharedPreferences
SharedPreferences prefes = getPreferences(Context.MODE_PRIVATE);
// Obtener la lista de modelos guardados en SharedPreferences
String modelosGuardados = prefes.getString("modelos", "null");
// Si hay modelos guardados, agregarlos a la lista
if (modelos != null && !modelosGuardados.isEmpty()) {
Type tipoLista = new TypeToken<ArrayList<Modelo>>(){}.getType();
ArrayList<Modelo> modelos = new Gson().fromJson(modelosGuardados, tipoLista);
listaModelos.addAll(modelos);
}
botonGuardar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Obtener datos de los TextViews
String fechaIngresada = textViewFechaIngresada.getText().toString();
String fechaActual = textViewFechaActual.getText().toString();
String diferenciaFechas = textViewDiferenciaFechas.getText().toString();
// Verificar que los TextViews no estén vacíos
if (!fechaIngresada.isEmpty() && !fechaActual.isEmpty() && !diferenciaFechas.isEmpty()) {
// Agregar objeto Modelo a la lista
agregarModelo(fechaIngresada, fechaActual, diferenciaFechas);
// Limpiar TextViews
textViewFechaIngresada.setText("");
textViewFechaActual.setText("");
textViewDiferenciaFechas.setText("");
// Actualizar adaptador del ListView
adaptador.notifyDataSetChanged();
}
}
public void agregarModelo(String fechaIngresada, String fechaActual, String diferenciaFechas) {
Modelo modelo = new Modelo(fechaIngresada, fechaActual, diferenciaFechas);
listaModelos.add(modelo);
// Guardar todos los modelos en SharedPreferences
guardarModelos();
}
});
// Guardar todos los modelos en SharedPreferences
//Aquí es en donde me da el problema
private void guardarModelos(String jsonModelos) {
// Convertir la lista de modelos a formato JSON
String modelosJson = new Gson().toJson(listaModelos);
// Obtener el objeto SharedPreferences.Editor
SharedPreferences prefes = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefes.edit();
// Guardar la lista de modelos en SharedPreferences
editor.putString("modelos", modelosJson);
editor.apply();
}
// Llamar a este método para guardar todos los modelos en SharedPreferences
guardarModelos();
final class AdaptadorLista extends ArrayAdapter<Modelo> {
private Context contexto;
private List<Modelo> listaModelos;
public AdaptadorLista(Context contexto, List<Modelo> listaModelos) {
super(contexto, R.layout.fila_lista, listaModelos);
this.contexto = contexto;
this.listaModelos = listaModelos;
}
@Override
public View getView(int posicion, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(contexto);
View view = inflater.inflate(R.layout.fila_lista, null);
TextView textViewFechaIngresada = view.findViewById(R.id.textViewFechaIngresada);
TextView textViewFechaActual = view.findViewById(R.id.textViewFechaActual);
TextView textViewDiferenciaFechas = view.findViewById(R.id.textViewDiferenciaFechas);
Modelo modelo = listaModelos.get(posicion);
textViewFechaIngresada.setText(modelo.getFechaIngresada());
textViewFechaActual.setText(modelo.getFechaActual());
textViewDiferenciaFechas.setText(modelo.getDiferenciaFechas());
return view;
}
}
}
}
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)