38 private TextView tvNombre, tvApellido, tvEmail, tvTelefono, tvDireccion;
39 private EditText etNombre, etApellido, etEmail, etTelefono, etDireccion;
40 private Button btnEdit, btnSave, btnCancel, btnRefreshPersonalData;
41 private CardView viewModeCard, editModeCard;
45 private RequestQueue requestQueue;
46 private static final String UPDATE_URL =
"https://backmobile1.onrender.com/appUSERS/update/";
47 private static final String TAG =
"PersonalDataFragment";
55 public View
onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
56 View view = inflater.inflate(R.layout.fragment_personal_data, container,
false);
59 requestQueue = Volley.newRequestQueue(requireContext());
66 viewModeCard = view.findViewById(R.id.view_mode_card);
67 tvNombre = view.findViewById(R.id.tv_nombre);
68 tvApellido = view.findViewById(R.id.tv_apellido);
69 tvEmail = view.findViewById(R.id.tv_email);
70 tvTelefono = view.findViewById(R.id.tv_telefono);
71 tvDireccion = view.findViewById(R.id.tv_direccion);
72 btnEdit = view.findViewById(R.id.btn_edit);
73 btnRefreshPersonalData = view.findViewById(R.id.btn_refresh_personal_data);
76 editModeCard = view.findViewById(R.id.edit_mode_card);
77 etNombre = view.findViewById(R.id.et_nombre);
78 etApellido = view.findViewById(R.id.et_apellido);
79 etEmail = view.findViewById(R.id.et_email);
80 etTelefono = view.findViewById(R.id.et_telefono);
81 etDireccion = view.findViewById(R.id.et_direccion);
82 btnSave = view.findViewById(R.id.btn_save);
83 btnCancel = view.findViewById(R.id.btn_cancel);
86 fetchUserDataFromBackend();
89 btnEdit.setOnClickListener(v -> switchToEditMode());
92 btnSave.setOnClickListener(v -> updateUserData());
95 btnCancel.setOnClickListener(v -> switchToViewMode());
98 btnRefreshPersonalData.setOnClickListener(v -> refreshUserDataFromBackend());
107 private void fetchUserDataFromBackend() {
109 Log.d(TAG,
"Utilizando datos guardados localmente desde el login");
112 ProgressDialog progressDialog =
new ProgressDialog(requireContext());
113 progressDialog.setMessage(
"Cargando datos...");
114 progressDialog.show();
118 new android.os.Handler().postDelayed(() -> {
119 progressDialog.dismiss();
122 displayPersonalData();
124 Toast.makeText(requireContext(),
"Datos cargados correctamente", Toast.LENGTH_SHORT).show();
127 }
catch (Exception e) {
128 progressDialog.dismiss();
129 Log.e(TAG,
"Error al cargar datos locales: " + e.getMessage());
130 Toast.makeText(requireContext(),
"Error al cargar los datos del usuario", Toast.LENGTH_SHORT).show();
131 displayPersonalData();
135 private void displayPersonalData() {
137 String nombre = profileManager.getName();
138 String apellido = profileManager.getSurname();
139 String email = profileManager.getEmail();
140 String telefono = profileManager.getPhone();
141 String direccion = profileManager.getAddress();
144 tvNombre.setText(nombre !=
null ? nombre :
"No disponible");
145 tvApellido.setText(apellido !=
null ? apellido :
"No disponible");
146 tvEmail.setText(email !=
null ? email :
"No disponible");
147 tvTelefono.setText(telefono !=
null ? telefono :
"No disponible");
148 tvDireccion.setText(direccion !=
null ? direccion :
"No disponible");
151 private void switchToEditMode() {
153 etNombre.setText(profileManager.getName());
154 etApellido.setText(profileManager.getSurname());
155 etEmail.setText(profileManager.getEmail());
156 etTelefono.setText(profileManager.getPhone());
157 etDireccion.setText(profileManager.getAddress());
160 viewModeCard.setVisibility(View.GONE);
161 editModeCard.setVisibility(View.VISIBLE);
164 private void switchToViewMode() {
166 editModeCard.setVisibility(View.GONE);
167 viewModeCard.setVisibility(View.VISIBLE);
170 private void updateUserData() {
172 ProgressDialog progressDialog =
new ProgressDialog(requireContext());
173 progressDialog.setMessage(
"Actualizando datos...");
174 progressDialog.setCancelable(
false);
175 progressDialog.show();
178 String nombre = etNombre.getText().toString().trim();
179 String apellido = etApellido.getText().toString().trim();
180 String email = etEmail.getText().toString().trim();
181 String telefono = etTelefono.getText().toString().trim();
182 String direccion = etDireccion.getText().toString().trim();
185 if (nombre.isEmpty() || apellido.isEmpty() || email.isEmpty()) {
186 Toast.makeText(requireContext(),
"Por favor, completa todos los campos obligatorios", Toast.LENGTH_SHORT).show();
187 progressDialog.dismiss();
192 JSONObject requestData =
new JSONObject();
194 requestData.put(
"nombre", nombre);
195 requestData.put(
"apellido", apellido);
196 requestData.put(
"email", email);
197 requestData.put(
"telefono", telefono);
200 requestData.put(
"direccion", direccion);
201 requestData.put(
"address", direccion);
202 requestData.put(
"direccion_entrega", direccion);
205 Log.d(
"UpdateUser",
"JSON enviado: " + requestData.toString());
206 }
catch (JSONException e) {
208 progressDialog.dismiss();
209 Toast.makeText(requireContext(),
"Error al preparar los datos", Toast.LENGTH_SHORT).show();
214 JsonObjectRequest jsonObjectRequest =
new JsonObjectRequest(
218 new Response.Listener<JSONObject>() {
220 public void onResponse(JSONObject response) {
221 Log.d(
"UpdateUser",
"Respuesta: " + response.toString());
222 progressDialog.dismiss();
226 if (response.has(
"success")) {
227 boolean success = response.getBoolean(
"success");
229 handleSuccessfulUpdate(nombre, apellido, email, telefono, direccion);
231 String error = response.optString(
"error",
"Error desconocido");
232 Toast.makeText(requireContext(),
"Error: " + error, Toast.LENGTH_SHORT).show();
237 handleSuccessfulUpdate(nombre, apellido, email, telefono, direccion);
239 } catch (JSONException e) {
241 Toast.makeText(requireContext(),
"Error al procesar la respuesta", Toast.LENGTH_SHORT).show();
245 new Response.ErrorListener() {
247 public void onErrorResponse(VolleyError error) {
248 progressDialog.dismiss();
249 String errorMsg =
"Error al actualizar los datos. ";
252 if (error.networkResponse !=
null) {
253 errorMsg +=
"Código: " + error.networkResponse.statusCode;
257 String responseBody =
new String(error.networkResponse.data,
"utf-8");
258 Log.e(
"UpdateUser",
"Error response: " + responseBody);
259 errorMsg +=
" - " + responseBody;
260 }
catch (Exception e) {
261 Log.e(
"UpdateUser",
"Error al leer el cuerpo del error", e);
265 Log.e(
"UpdateUser", errorMsg, error);
266 Toast.makeText(requireContext(), errorMsg, Toast.LENGTH_SHORT).show();
271 public Map<String, String> getHeaders() throws AuthFailureError {
272 Map<String, String> headers =
new HashMap<>();
274 String token = sessionManager.getToken();
276 headers.put(
"Authorization",
"Bearer " + token);
278 Log.d(
"UpdateUser",
"Token enviado: " + token);
280 Log.e(
"UpdateUser",
"No hay token disponible");
282 headers.put(
"Content-Type",
"application/json");
288 jsonObjectRequest.setRetryPolicy(
new com.android.volley.DefaultRetryPolicy(
291 com.android.volley.DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
295 requestQueue.add(jsonObjectRequest);
298 private void refreshUserDataFromBackend() {
299 ProgressDialog progressDialog =
new ProgressDialog(requireContext());
300 progressDialog.setMessage(
"Actualizando datos...");
301 progressDialog.setCancelable(
false);
302 progressDialog.show();
304 String url =
"https://backmobile1.onrender.com/appUSERS/me/";
305 String token = sessionManager.
getToken();
307 JsonObjectRequest request =
new JsonObjectRequest(Request.Method.GET, url,
null,
309 progressDialog.dismiss();
311 String nombre = response.optString(
"nombre",
"");
312 String apellido = response.optString(
"apellido",
"");
313 String email = response.optString(
"email",
"");
314 String telefono = response.optString(
"telefono",
"");
315 String direccion = response.optString(
"direccion",
"");
316 String profileImageUrl = response.optString(
"imagen_perfil_url", profileManager.getProfileImageUrl());
317 profileManager.saveInfo(nombre, apellido, email, telefono, profileImageUrl, direccion);
318 displayPersonalData();
319 Toast.makeText(requireContext(),
"Datos actualizados", Toast.LENGTH_SHORT).show();
320 } catch (Exception e) {
321 Toast.makeText(requireContext(),
"Error al actualizar datos", Toast.LENGTH_SHORT).show();
325 progressDialog.dismiss();
326 Toast.makeText(requireContext(),
"Error al conectar con el servidor", Toast.LENGTH_SHORT).show();
329 public Map<String, String> getHeaders() throws AuthFailureError {
330 Map<String, String> headers =
new HashMap<>();
331 headers.put(
"Authorization",
"Bearer " + token);
335 requestQueue.add(request);
338 private void handleSuccessfulUpdate(String nombre, String apellido, String email, String telefono, String direccion) {
343 profileManager.
saveInfo(nombre, apellido, email, telefono, profileImageUrl, direccion);
345 Log.d(
"UpdateUser",
"Datos guardados localmente - Nombre: " + nombre +
346 ", Apellido: " + apellido +
347 ", Email: " + email +
348 ", Teléfono: " + telefono +
349 ", Dirección: " + direccion +
350 ", URL de imagen: " + profileImageUrl);
353 displayPersonalData();
356 Toast.makeText(requireContext(),
"Datos actualizados correctamente", Toast.LENGTH_SHORT).show();