Android-приложение, метод HttpURLConnection GET, AsyncTask получает тег вместо результата - PullRequest
0 голосов
/ 03 сентября 2018

Это простое приложение, которому нужно отправить два числа с помощью GET и прочитать обратно.

Button btnSaberi;
    EditText txtAunos, txtBunos;
    TextView txtIspis;
    String sturl = "http://xxx.xxx.xx.x/PhpProject1/index.php";
    Integer a, b;
    HttpURLConnection httpURLConnection;
    URL url;
    public void posalji(View view){
    a = Integer.parseInt(txtAunos.getText().toString());
    b = Integer.parseInt(txtBunos.getText().toString());
    sturl = sturl+"?a=" + a + "&b=" + b;
    new Posalji().execute(sturl);
}

class Posalji extends AsyncTask<String, String, String> {

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        txtIspis.setText("Rezultat je : " + s);
    }

    @Override
    protected String doInBackground(String... strings) {
        try {
            url = new URL(strings[0]);
            httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("GET");
            httpURLConnection.connect();
            BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
            rez = br.readLine();
        }
        return rez;
    }
}
}

Использование эмулятора.

Я изменился, и теперь вместо того, чтобы показать мне вывод php, он показывает мне html-тег.

"<!DOCTYPE html>"

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Когда вы звоните br.readLine (); только один раз, он читает только первую строку данных из BufferedReader. Чтобы прочитать все строки данных из BufferedReader, вам нужно использовать цикл.

Обновите ваш метод doInBackground

@Override 
protected String doInBackground(String... params){
   String url = params[0];
   String result;

   try {
      URL myUrl = new URL(url);

      HttpURLConnection connection =(HttpURLConnection) myUrl.openConnection();
      connection.setRequestMethod("GET");
      connection.connect()

      InputStreamReader streamReader = new InputStreamReader(connection.getInputStream());      
      BufferedReader reader = new BufferedReader(streamReader);
      StringBuilder stringBuilder = new StringBuilder();
      String inputLine;

      while((inputLine = reader.readLine()) != null){
         stringBuilder.append(inputLine);
      }

      reader.close();
      streamReader.close();

      result = stringBuilder.toString();
   }
   return result;   
}
0 голосов
/ 03 сентября 2018

Пожалуйста, удалите txtIspis.setText ("Результат je:" + br.readLine ()); строка из AsyncTask doInBackground. В doInBackground мы никогда не обновляем такой интерфейс. Вы можете использовать onPostExecute для обновления значений в текстовом поле.

Пожалуйста, прочитайте этот документ https://developer.android.com/reference/android/os/AsyncTask

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...