|
||
|
|
|
|||||||
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
utf8
Pues eso, la ñ esta desaparecida, y en el php si se ve, ¿Alguna solucion con la clase ? Por que en el json se ve perfectamente, en minuscula eso si pero no se ven los caracteres raros. Gracias
Código:
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import com.herprogramacion.restaurantericoparico.R;
import com.herprogramacion.restaurantericoparico.Ranking_Amonestaciones_Cadetes;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class Ranking_Amonestaciones_Adapter_Juveniles extends ArrayAdapter {
// Atributos
private RequestQueue requestQueue;
JsonObjectRequest jsArrayRequest;
private static final String URL_BASE = "http://cadetes.esy.es/2015/amonestados_juvenil.php";
private static final String URL_JSON = "";
private static final String TAG = "";
List<Ranking_Amonestaciones_Cadetes> items;
public Ranking_Amonestaciones_Adapter_Juveniles(Context context) {
super(context,0);
// Crear nueva cola de peticiones
requestQueue= Volley.newRequestQueue(context);
// Nueva peticion JSONObject
jsArrayRequest = new JsonObjectRequest(
Request.Method.GET,
URL_BASE + URL_JSON,
null,
new Response.Listener<JSONObject>() {
@override
public void onResponse(JSONObject response) {
items = parseJson(response);
notifyDataSetChanged();
}
},
new Response.ErrorListener() {
@override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "Error Respuesta en JSON: " + error.getMessage());
}
}
);
// Anyadir peticion a la cola
requestQueue.add(jsArrayRequest);
}
@override
public int getCount() {
return items != null ? items.size() : 0;
}
@override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
// Referencia del view procesado
View listItemView;
//Comprobando si el View no existe
listItemView = null == convertView ? layoutInflater.inflate(
R.layout.ranking_amonestaciones_cadetes_row,
parent,
false) : convertView;
// Obtener el item actual
Ranking_Amonestaciones_Cadetes item = items.get(position);
// Obtener Views
TextView textoNombre = (TextView) listItemView.findViewById(R.id.tv_nombre_local);
TextView textoTargetas = (TextView) listItemView.findViewById(R.id.tv_goles);
TextView textoAmarillas = (TextView) listItemView.findViewById(R.id.tv_dobles);
TextView textoDobles = (TextView) listItemView.findViewById(R.id.tv_amarillas);
TextView textoRojas = (TextView) listItemView.findViewById(R.id.tv_rojas);
TextView textoEquipo = (TextView) listItemView.findViewById(R.id.tv_equipo);
// Actualizar los Views
textoNombre.setText(item.getNombre());
textoTargetas.setText(item.getTargetas());
textoAmarillas.setText(item.getAmarillas());
textoDobles.setText(item.getDobles());
textoRojas.setText(item.getRojas());
textoEquipo.setText(item.getEquipo());
// Anyadir peticion a la cola
return listItemView;
}
public List<Ranking_Amonestaciones_Cadetes> parseJson(JSONObject jsonObject){
// Variables locales
List<Ranking_Amonestaciones_Cadetes> rankingAmonestacionesCadetes = new ArrayList<>();
JSONArray jsonArray= null;
try {
// Obtener el array del objeto
jsonArray = jsonObject.getJSONArray("maxAmonestados");
for(int i=0; i<jsonArray.length(); i++){
try {
JSONObject objeto= jsonArray.getJSONObject(i);
Ranking_Amonestaciones_Cadetes RankingAmonestacionesCadetes = new Ranking_Amonestaciones_Cadetes(
objeto.getString("nombre"),
objeto.getString("totalTarjetas"),
objeto.getString("amarillas"),
objeto.getString("dobles"),
objeto.getString("rojas"),
objeto.getString("equipo"));
rankingAmonestacionesCadetes.add(RankingAmonestacionesCadetes);
} catch (JSONException e) {
Log.e(TAG, "Error de parsing: " + e.getMessage());
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return rankingAmonestacionesCadetes;
}
}
Última edición por Merche300 Día 02/04/16 a las 21:52:18. |
|
|
|
#2
|
||||
|
||||
|
El servidor ese devuelve las codificaciones que le da la gana y no es consistente.
La ñ minúscula no es una ñ aunque lo veas así en el navegador, si miras el código fuente de la página es RAFELBU& #241;OL C.F. (te pongo un espacio extra para que no salga la ñ) Es decir, ahí los caracteres especiales están codificados como si fuera ASCII con códigos numéricos (como los que usan al codificar las URL). El navegador lo entiende y lo cambia por la ñ, pero para Java es texto normal salvo que lo decodifiques. Sin embargo en otros campos pone MAñES PADIAL, ahí claramente es un problema de no especificar la codificación. Es de suponer que es UTF-8 y se está interpretando como ISO Latin 1 que es el encoding por defecto en HTML y el que usa Volley si no tiene información en las cabeceras de la respuesta HTTP. Lo ideal sería que el servidor estuviera bien hecho, pero como no va a ocurrir lo mejor es que arregles los desperfectos a mano (sustituyendo los caracteres raros por los correctos y arreglando las minúsculas/mayúsculas), tampoco hay tantos caracteres especiales y seguro que acabas antes tratando cada uno individualmente.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Última edición por mocelet Día 27/02/16 a las 23:12:06. |
| Gracias de parte de: | ||
|
#3
|
||||
|
||||
|
El servidor ese devuelve las codificaciones que le da la gana y no es consistente.
La ñ minúscula no es una ñ aunque lo veas así en el navegador, si miras el código fuente de la página es RAFELBU& #241;OL C.F. (te pongo un espacio extra para que no salga la ñ) Es decir, ahí los caracteres especiales están codificados como si fuera ASCII con códigos numéricos (como los que usan al codificar las URL). El navegador lo entiende y lo cambia por la ñ, pero para Java es texto normal salvo que lo decodifiques. Sin embargo en otros campos pone MAñES PADIAL, ahí claramente es un problema de no especificar la codificación. Es de suponer que es UTF-8 y se está interpretando como ISO Latin 1 que es el encoding por defecto en HTML y el que usa Volley si no tiene información en las cabeceras de la respuesta HTTP. Lo ideal sería que el servidor estuviera bien hecho, pero como no va a ocurrir lo mejor es que arregles los desperfectos a mano (sustituyendo los caracteres raros por los correctos y arreglando las minúsculas/mayúsculas), tampoco hay tantos caracteres especiales y seguro que acabas antes tratando cada uno individualmente. ![]() $data3 = str_replace(array("ñ"),"NY",$data2); Bueno cambiar la ñ por los caracteres que pones arriba Supuestamente la ñ viene a ser ny en valenciano, supongo que catalán también, y cambiando los caracteres es lo que e conseguido para que se vea RAFELBUNYOL. Última edición por Merche300 Día 28/02/16 a las 00:04:53. |
|
#4
|
||||
|
||||
|
Muchas gracias,no tienes idea de lo que me has ayudado.
$data3 = str_replace(array("ñ"),"NY",$data2); Bueno cambiar la ñ por los caracteres que pones arriba Supuestamente la ñ viene a ser ny en valenciano, supongo que catalán también, y cambiando los caracteres es lo que e conseguido para que se vea RAFELBUNYOL. ![]() |
| Gracias de parte de: | ||
|
#5
|
||||
|
||||
|
¿Pero entonces el servidor lo controlas tú? El código que has puesto antes es PHP no Java. Para arreglar los otros caracteres o bien indicas que el content type tiene el charset utf8 o bien haces la conversión en el PHP a ISO latin antes de mandarlo.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
| Gracias de parte de: | ||
|
#6
|
||||
|
||||
|
kriogeN si, Ñ mayusculas y ñ para minusculas,pero vuelve a reconocer la ñ y sale un rombo negro con un interrogante blanco en el fondo, no se porque pero asi es, al menos en mi caso
|
|
#7
|
||||
|
||||
|
En este caso lo controlo yo
|
|
#8
|
||||
|
||||
|
Dado que sólo genera un JSON lo suyo es que las cabeceras estén bien generadas en el PHP:
header('Content-Type: application/json; charset=utf-8'); O text/plain si te diera algún problema P.D. También puede ser que el problema de codificación venga de otro sitio, por ejemplo al leer de la base de datos. En algún sitio se asume que es una codificación siendo otra, mientras antes se arregle en la cadena de transformaciones mejor.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Última edición por mocelet Día 28/02/16 a las 08:42:14. |
| Gracias de parte de: | ||
|
#9
|
||||
|
||||
|
Yo uso esto en mi WebService con PHP y me funciona MUY BIEN mostrando sin problemas las ñ en android.
Yo devuelvo un array en json desde PHP Cuando necesito llenar el array campo por campo, el campo NOM1 es nombre completo y logico que vendra una ñ por ahi: $datos1["NOM1"]=utf8_encode($row["NOM1"]); Y tambien cuando paso todo el array devuelto en la consulta sin necesidad de tratamientos especiales: $datos[]=array_map('utf8_encode', $row); Saludos. |
| Gracias de parte de: | ||