Я не получаю результатов при получении данных из базы данных, почему? java (студия Android

При отладке я вижу, что он помещает все, что мне нужно, в sb StringBuilders, но после второго sb данные просто исчезают, и то, что было ранее записано в security_string, также удаляется, не знаю почему.

Вот весь код, немного изменил его с тех пор, как я опубликовал. По-прежнему то же самое, это не выходит за рамки, потому что результат get_kat, который я получаю, отсутствует, только результат get_ter отсутствует.

@Override
public String doInBackground(String... voids) {

    String result = "";
    result=getting_kat();
    result+=getting_ter();
    //Making sure it gets put into the safety string
    safety_string=result;
    return result;
}

public String getting_kat(){
    String result = "";
    String resultkat = null;
    String connstr = "My connection string";
    try {
        URL url = new URL(connstr);
        HttpURLConnection http = (HttpURLConnection) url.openConnection();
        http.setRequestMethod("POST");
        http.setDoInput(true);
        http.setDoOutput(true);


        InputStream ips = http.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(ips, "UTF-8"), 8);
        StringBuilder sb = new StringBuilder();
        String line = "";

        //Line by Line reading the data from php

        while ((line = br.readLine()) != null) {
            sb.append(line+"\n");
        }

        //String it together into one line
        resultkat = sb.toString();

        //Adding a separator for later split
        result=resultkat+"#KATEGORIA/TERMEK#";

        br.close();
        ips.close();
        http.disconnect();

    } catch (MalformedURLException e) {
        result = e.getMessage();
    } catch (IOException e) {
        result = e.getMessage();
    }
    return result;
}

public String getting_ter(){
    String result = "";
    String resultter=null;
    String connstr2 = "My connection string 2";



    try {
        URL url = new URL(connstr2);
        HttpURLConnection http = (HttpURLConnection) url.openConnection();
        http.setRequestMethod("POST");
        http.setDoInput(true);
        http.setDoOutput(true);

        InputStream ips = http.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(ips, "UTF-8"), 8);
        StringBuilder sb = new StringBuilder();
        String line = "";

        //Line by Line reading the data from php

        while ((line = br.readLine()) != null) {
            sb.append(line+"\n");
        }

        //String it together into one line
        resultter = sb.toString();

        result=resultter;

        br.close();
        ips.close();
        http.disconnect();

    } catch (MalformedURLException e) {
        result = e.getMessage();
    } catch (IOException e) {
        result = e.getMessage();
    }
    return result;
}

Я бы порекомендовал вам узнать значение DRY. Повторение кода нехорошо. Вам следует инкапсулировать проделанную здесь работу в более простой метод, который вы можете протестировать на стороне и использовать. Держу пари, что проблема связана с областью видимости, но трудно сказать, не видя всего метода.

duffymo 20.11.2018 15:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
49
1

Ответы 1

Я не вижу ошибки в коде. Я немного почистил его для вас, но он должен работать как до, так и после моих изменений. Вы не описываете, что на самом деле с этим не так. При отладке у вас может просто быть тайм-аут на вашем соединении.

public String doInBackground(String... voids) {
    String result = getting_kat() + "#KATEGORIA/TERMEK#" + getting_ter();
    //Making sure it gets put into the safety string
    safety_string = result;
    return result;
}

public String getting_kat() {
    String result = "";
    String connstr = "My connection string";

    try {
        HttpURLConnection http = connect(connstr);
        result = readFromPhp(http);
        http.disconnect();
    } catch (MalformedURLException e) {
        result = e.getMessage();
    } catch (IOException e) {
        result = e.getMessage();
    }
    return result;
}

public String getting_ter() {
    String result = "";
    String connstr = "My connection string 2";

    try {
        HttpURLConnection http = connect(connstr);
        result = readFromPhp(http);
        http.disconnect();
    } catch (MalformedURLException e) {
        result = e.getMessage();
    } catch (IOException e) {
        result = e.getMessage();
    }
    return result;
}

private HttpURLConnection connect(String connstr) throws IOException {
    URL url = new URL(connstr);
    HttpURLConnection http = (HttpURLConnection) url.openConnection();
    http.setRequestMethod("POST");
    http.setDoInput(true);
    http.setDoOutput(true);
    return http;
}

private String readFromPhp(HttpURLConnection http) throws IOException {
    // try-with-resources - so you don't have to call close()
    try (
            InputStream ips = http.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(ips, "UTF-8"), 8)
    ) {
        StringBuilder sb = new StringBuilder();

        String line;
        //Line by Line reading the data from php
        while ((line = br.readLine()) != null) {
            sb.append(line).append("\n");
        }

        //String it together into one line
        return sb.toString();
    }
}

Это не соединение, при отладке, когда я заполняю конструкторы строк, я вижу, что он получает данные, но после этого данные просто удаляются. Кстати, я исправил это, не знаю, как это работало, но я просто использовал свою безопасность_string для получения данных в while (), и это сработало, но в любом случае спасибо за помощь

Gaminator 21.11.2018 20:18

Я пробовал использовать ваш код, результат в обоих случаях был ничем, затем я ввел две новые общедоступные строки security_string_kat и ..._ ter, kat работает, ter остается пустым, так странно, и снова, когда я отлаживаю, вижу, что все поступающие данные помещаются в построитель строк, и я все еще не получаю данных в и, но, как я уже сказал, только когда вызывается get_ter ... fml <3 java

Gaminator 22.11.2018 09:54

что значит "результат - ничто", как этот код вызывается в вашей программе, к какому классу относится эта часть?

Milo Bem 22.11.2018 11:40

это AsyncTask?

Milo Bem 22.11.2018 15:30

Другие вопросы по теме