1

Tengo una base de datos en mi aplicación Android y lo publico desde la misma o desde Hostinguer y funciona . Lo que sucede es que si introduzco un tilde o la letra "ñ" simplemente no se me publica. Es decir no lo acepta.

Estoy seguro de que es algo de utf-8 y algún parámetro que me estoy saltando pero no lo veo y he introducido diferentes formas de utf-8 sin resultado.

¿Qué parámetros me falta por cambiar?

El problema era en java ya que en la base de datos me deja poner tildes, el problema es cuando lo introduzco desde la App, tengo que poner en algún lado lo de UTF-8 ? Intuyo que sí pero dónde?

public class Admin extends AppCompatActivity {


    EditText titulo_in;
    EditText descripcion_in;
    Button btnActualizarA;

    String recuperado="";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.admin);

        titulo_in = (EditText)findViewById(R.id.titulo_in);
        descripcion_in = (EditText)findViewById(R.id.descripcion_in);

       // titu = titulo_in.getText().toString();
        //desc = descripcion_in.getText().toString();



        final Bundle recupera=getIntent().getExtras();
        if(recupera!=null){
            recuperado=recupera.getString("cod");
        }

        btnActualizarA=(Button)findViewById(R.id.publicar);
        btnActualizarA.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Thread tr2=new Thread(){
                    @Override
                    public void run() {
                        ActualizarPost(recuperado, titulo_in.getText().toString(), descripcion_in.getText().toString());

                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(getApplicationContext(),"Se ha completado la publicación", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                };
                tr2.start();
            }
        });


    }

    public void ActualizarPost(String c, String tit, String des){
        String urlParameters="cod="+c+"&tit="+tit+"&des="+des;
       // HttpURLConnection conection=null;
        try{
            URL url=new URL("xxxx");
            HttpURLConnection conection = (HttpURLConnection) url.openConnection();
            conection.setRequestProperty("Accept-Charset", "UTF-8");
           // BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));

            //estableciendo el metodo
            conection.setRequestMethod("POST");

            //longitud de datos que se envian
            conection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
            conection.setRequestProperty("Content-Type", "application/json; charset=utf-8");


            //comando para la salida de datos
            conection.setDoOutput(true);

            DataOutputStream wr=new DataOutputStream(conection.getOutputStream());
            wr.writeBytes(urlParameters);
            wr.close();

            InputStream is =conection.getInputStream();

        }catch (Exception ex){}
    }
}
fedorqui
  • 15,850
  • 17
  • 58
  • 112
Rf Mvs
  • 1,420
  • 2
  • 19
  • 38
  • 1
    Uf menudo caos has montado con los ` . para formatear codigo no uses eso, lo seleccionas y pulsas `ctrl+k` o el icono `{}` – lois6b Feb 03 '17 at 11:21
  • amigo hay una diferencia entre acentos y tildes, tu tienes problemas de tildes, los acentos no son la parte escrita y segundo pudiste resolver tu problema ? – Ashley G. Feb 03 '17 at 17:59
  • No Ashley , no pude, he actualizado con mi autentico .java, que me lié y puse otro, necesito poner el UTF-8 en alguna parte pero no sé donde. – Rf Mvs Feb 04 '17 at 08:32
  • ¿Has programado tú el servicio que responde al hacer la solicitud mediante la dirección URL? Creo que el problema está ahí, al conectar a la base de datos. Mira esta respuesta: https://es.stackoverflow.com/a/59510 – A. Cedano Jun 23 '17 at 07:03

2 Answers2

0

La comunicación no tiene definido el utf-8

HttpURLConnection conection = (HttpURLConnection) url.openConnection();
conection.setRequestProperty("Accept-Charset", "UTF-8");

creo que bastaría con eso, pero igual debes revisar como envia la respuesta el servidor

Maguz
  • 964
  • 1
  • 10
  • 24
  • He quitado la linea de ``HttpURLConnection conection=null;`` y he puesto esas dos que has puesto, es eso no? Voy a ver – Rf Mvs Feb 03 '17 at 13:45
  • @RfMvs tu ya tienes la linea HttpURLConnection conection = (HttpURLConnection) url.openConnection(); solo agrega la segunda a continuación. – Maguz Feb 03 '17 at 13:46
  • No me funciona, no se publica.. he intentado poner lo de : ``URLEncoder.encode..`` pero sin exito también, por que crees que debe ser, la línea que has puesto la dejo entonces aunque no vaya? – Rf Mvs Feb 03 '17 at 14:14
  • no, no la dejes, yo haría Log.d en android y echo en el servidor para ver que sale y que llega – Maguz Feb 03 '17 at 14:54
  • @RfMvs supongo que tu app se conecta al webservice mendiante PHP ? – Ashley G. Feb 03 '17 at 18:01
  • he puesto de nuevo mi codigo que lo habia puesto mal! revisadlo porfa he puesto lo que habéis dicho y nada. – Rf Mvs Feb 04 '17 at 08:22
0

Si estas seguro que los datos llegan correctamente como indicas, especifica el tipo de codificación en el InputStreamReader

//BufferedReader reader = new BufferedReader (new InputStreamReader(in));
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
Jorgesys
  • 103,630
  • 13
  • 52
  • 124
  • Elena, me he equivocado de código, miralo de nuevo, ese es el que estoy usando y no funciona con tildes. – Rf Mvs Feb 04 '17 at 08:21
  • o como sustituir los acentos por letras normales? me refiero.. "á" por "a" ? y "é" por "e" ? – Rf Mvs Feb 07 '17 at 12:21