Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Java android - jak vrátit z metody pole typu string

Dobrý večer, mám zhruba tento kód:

[95069-kod-png]

Kód se má v nativní aplikaci na androidu připojit k PHP serveru a vrátit výstup.

Vše funguje, jak má, pokud vracím jen String (výstup). A to z metody doInBackground.
Já bych ovšem potřeboval vracet pole stringů.

Jedná se o private class UpdateTask extends AsyncTask<String, Void, List<String>> , který provede metodu doInBackground a
následně vrací String. Já jsem to celé přepsal, aby vracel pole Stringů:

Konkrétně pole Result String:

 @Override
        protected List<String> doInBackground(String... args) {
            String response2 = "";
            OutputStream os = null;
            InputStream is = null;
            HttpURLConnection conn = null;

            List<String> result = new ArrayList<>();
            try {
                URL url = new URL("https://nejakawebka.php");
                conn = (HttpURLConnection) url.openConnection();
                try {
                    conn.setReadTimeout(10000);
                    conn.setConnectTimeout(15000);
                    conn.setRequestMethod("POST");
                    conn.setDoInput(true);
                    conn.setDoOutput(true);

                    String response = String.valueOf(conn.getResponseCode());

                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(new BasicNameValuePair("login", args[0]));
                    params.add(new BasicNameValuePair("password", args[1]));
                    //params.add(new BasicNameValuePair("thirdParam", paramValue3));

                    os = conn.getOutputStream();
                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));

                    writer.write(getQuery(params));
                    writer.flush();
                    writer.close();
                    os.close();


                    result.add(response);
                    vstup.add(response);
                    String line;
                    BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
                    while ((line=br.readLine()) != null) {
                        response2 += line;
                    }

                    result.add(response2);
                    vstup.add(response2);

                }catch (Exception ex){
                    Toast.makeText(getApplicationContext(), ex.toString(), Toast.LENGTH_LONG).show();
                }
                    finally {
                    conn.disconnect();

                    return result;
                }
            }
            catch (Exception ex) {

            }

  
            return result;
        }

Pak mám:

  @Override
        protected void onPostExecute(List<String> finalResult) {
            super.onPostExecute(finalResult);

            if(!finalResult.isEmpty()) {
            if (!isCancelled()) {
                if (listener != null) {

                 
                    totalResult.add("ONE");
                    totalResult.add("TWO"); */
                    Toast.makeText(getApplicationContext(), "pocet pole  " + String.valueOf(totalResult.get(0)), Toast.LENGTH_LONG).show();
                   
                    listener.onMyAsynTaskCompleted(1, totalResult);
                }
            }
            }
        }

Metoda onPostExecute se normálně zavolá.
Jenomže předané pole do ní je úplně prázdné.
Nechápu proč.

Zkoušel jsem i naplnit v této metodě onPostExecute jiné pole, totalResult a to se vrací úplně v pohodě.

Tak kde je prosím problém ??? Nechápu.

Předmět Autor Datum
Nevim, jak je to u Javy, ale zjus nadefinovat nový typ typu List<String> a ten pak pouzit v deklarac…
Jan Fiala 25.04.2022 03:21
Jan Fiala
Tak chyba byla jinde. A to v tom, jak jsem postupně otevíral spojení. Kdyby to někomu pomohlo, funk… poslední
Flash_Gordon 25.04.2022 03:47
Flash_Gordon

Tak chyba byla jinde.
A to v tom, jak jsem postupně otevíral spojení.

Kdyby to někomu pomohlo, funkce odzkoušená vypadá takto:

private ArrayList<String> Update(final String urlString, String login, String password)
        {
            String response2 = "";
            OutputStream os = null;
            InputStream is = null;
            HttpURLConnection conn = null;
            mujString = new ArrayList<>();
            int resCode = 0;
            try {
                URL url = new URL(urlString);
                conn = (HttpURLConnection) url.openConnection();

                conn.setReadTimeout(10000);
                conn.setConnectTimeout(15000);
                conn.setRequestMethod("POST");
                conn.setDoInput(true);
                conn.setDoOutput(true);

                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("login", login));
                params.add(new BasicNameValuePair("password", password));
                //params.add(new BasicNameValuePair("thirdParam", paramValue3));

                os = conn.getOutputStream();

                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));

                writer.write(getQuery(params));

                writer.flush();
                writer.close();
                os.close();
                resCode = conn.getResponseCode();

                String line;
                BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
                while ((line=br.readLine()) != null) {
                    response2 += line;
                }

                //mujString.add(String.valueOf(resCode));
                //mujString.add(response2);
            }
            catch (Exception ex) {

            }
            finally {
                conn.disconnect();

            }

            mujString.add(String.valueOf(resCode));
            mujString.add(response2);

            return  mujString;
        }

Zpět do poradny Odpovědět na původní otázku Nahoru