тратить Json в android studio ФАТАЛЬНЫЙ EXCEPTION: Thread-13149

У меня есть следующий код, чтобы тратить данные с webservice:

public String enviardatosGet(String user, String pass){

    URL url = null;
    String linea = "";
    int respuesta = 0;
    StringBuilder resul = null;
    try {
        url = new URL("http://www.nestel.cl/Login.php?user="+user+"&pass="+pass);
        HttpURLConnection conexion= (HttpsURLConnection)url.openConnection();
        respuesta=conexion.getResponseCode();

        resul=new StringBuilder();

        if (respuesta==HttpURLConnection.HTTP_OK )
        {
            InputStream in=new BufferedInputStream(conexion.getInputStream());
            BufferedReader reader=new BufferedReader(new InputStreamReader(in));

            while((linea=reader.readLine())!=null)
            {
                resul.append(linea);
            }
        }

        }
    catch (Exception e){
        Toast.makeText(getApplicationContext(), "error", Toast.LENGTH_LONG).show();
    }

    return resul.toString();
}


public int obtenerdatosJSON(String response){

    int respuesta = 0;
    try {
        JSONArray json = new JSONArray(response);
        if(json.length()>0)
        {
            respuesta = 1;
        }
    }catch (Exception e){}
    return  respuesta;
}


public void onClick(View v) {

    Thread tr = new Thread(){
        @Override
        public void run() {
            final String resultado = enviardatosGet(mirut.getText().toString(), mipass.getText().toString());
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    int r=obtenerdatosJSON(resultado);
                    if(r>0){
                        Intent i = new Intent(getApplicationContext(),menu.class);

                        startActivity(i);
                    }else{
                        Toast.makeText(getApplicationContext(), "usuario o pass incorrecto", Toast.LENGTH_LONG).show();
                    }
                }
            });
        }
    };
    tr.start();
}

Меня бросает следующая ошибка:

FATAL EXCEPTION: Thread-13149

              Process: com.example.luisalarcon.alumnos, PID: 24002

              java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
                  at android.os.Handler.<init>(Handler.java:200)
                  at android.os.Handler.<init>(Handler.java:114)
                  at android.widget.Toast$TN.<init>(Toast.java:627)
                  at android.widget.Toast.<init>(Toast.java:131)
                  at android.widget.Toast.makeText(Toast.java:431)
                  at com.example.luisalarcon.alumnos.MainActivity.enviardatosGet(MainActivity.java:67)
                  at com.example.luisalarcon.alumnos.MainActivity$1.run(MainActivity.java:93)

Какое-то решение?

1
задан 24.11.2016, 23:41
2 ответа

Дав click в твоей кнопке, ты не нуждаешься в том, чтобы создать один Thread, так как ты используешь runOnUiThread () , я предлагаю добавил внутри tambiГ©n ты peticiГіn enviardatosGet(), так как, таким образом, он должен мочь выполнять без проблем эту operaciГіn внутри главного Thread:

public void onClick(View v) {

 //   Thread tr = new Thread(){
 //        @Override
 //       public void run() {

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                     String resultado = enviardatosGet(mirut.getText().toString(), mipass.getText().toString());
                    int r=obtenerdatosJSON(resultado);
                    if(r>0){
                        Intent i = new Intent(getApplicationContext(),menu.class);

                        startActivity(i);
                    }else{
                        Toast.makeText(getApplicationContext(), "usuario o pass incorrecto", Toast.LENGTH_LONG).show();
                    }
                }
            });
  //      }
  // };
  //  tr.start();
}
2
ответ дан 24.11.2019, 12:23

Хорошие, у использования Threads в android есть incoveniente, которого ты ничего не можешь менять из UI с ahГ, - ты можешь использовать AsyncTask здесь я оставляю тебе пример как это podrГ-схвати влезать:

private class JsonTask extends AsyncTask<String, Integer, String> {
 @Override
 protected String doInBackground(String... urls) {
     String resultado = enviardatosGet(mirut.getText().toString(), mipass.getText().toString());
     return resultado;
 }

 @Override
 protected void onPostExecute(String result) {
     int r=obtenerdatosJSON(result);
     if(r>0){
        Intent i = new Intent(getApplicationContext(),menu.class);

        startActivity(i);
     }else{
        Toast.makeText(getApplicationContext(), "usuario o pass incorrecto", Toast.LENGTH_LONG).show();
     }
 }
}

new JsonTask().execute("");

я не смог тестировать это, потому что у меня нет Андроид Студио впереди, он пытается и ты комментируешь мне, чтобы видеть, как он пошел.

Приветствие!

0
ответ дан 24.11.2019, 12:23

Теги

Похожие вопросы