Błąd przy pobieraniu danych z JSON-a do aplikacji na androida

0

Mam pytanie. Czemu jak pobieram tylko pojedynczy tekst ( string ) z JSON-a i próbuje go wyświetlić to wszystko działa, a gdy próbuje dodać kilka tekstów do tablicy z JSON-a to nic się nie dodaje ( po wywołaniu .size() pokazuje 0 ).

JSON:

[{"nazwa":"Rower"},,{"nazwa":"Rower mtb"},{"nazwa":"rower"}]

Nie wiem czy ten JSON jest też dobry ( w przeglądarce pokazuje się on w 1 lini )

Proszę o pomoc ponieważ jestem nowy jak chodzi o aplikację I bazy danych

0

Jest błędny, masz tam zbędny przecinek - sprawdź np tutaj: https://jsonlint.com/

0

A jak to naprawić, żeby skrypt PHP zwracał poprawnego JSON-a ?
A w sprawie poprawności JSON-a, jak jest niepoprawny to czemu mogę pobrać tylko 1 tekst a całej tablicy nie ?

0

Pokaż kod odpowiedzialny za parsowanie jsona

0

Tu masz całą klasę odpowiedzialną za pobieranie tego JSON-a

package bjd.adrian.shopserach;

import android.content.Context;
import android.os.AsyncTask;
import android.util.JsonReader;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;

public class BackgroundWorker extends AsyncTask<String, Void, String>
{

    Context context;

    public BackgroundWorker(Context ctx)
    {
        context = ctx;
    }
    ArrayList<JSONArray> mNames = new ArrayList<JSONArray>();


    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params)
    {
        String type = params [0];
        String name = params[1];
        String result = "";
        if(type.equals("serach"))
        {

            try
            {
                URL serachURL = new URL("http://192.168.100.8/szukajProduktu.php");
                HttpURLConnection httpURLConnection = (HttpURLConnection) serachURL.openConnection();
                httpURLConnection.setDoInput(true);
                httpURLConnection.setDoOutput(true);
                httpURLConnection.setRequestMethod("POST");
                OutputStream outputStream = httpURLConnection.getOutputStream();
                BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));


                String data = URLEncoder.encode("name_product", "UTF-8")+"="+URLEncoder.encode(name, "UTF-8");

                bufferedWriter.write(data);
                bufferedWriter.flush();
                bufferedWriter.close();
                outputStream.close();

                InputStream inputStream = httpURLConnection.getInputStream();
                // Implementacja BufferedReader-a aby nadpisał zmienną result informacjami otrzymanymi od serwera
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"));
                String line = "";
                while ((line = bufferedReader.readLine()) != null)
                {
                    result += line;
                }


                inputStream.close();
                httpURLConnection.disconnect();

                JsonReader jsonReader = new JsonReader(bufferedReader);
                jsonReader.
                JSONArray jsonArray = new JSONArray(result);
                for (int i = 0;i<jsonArray.length(); i++)
                {

                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    mNames.add(jsonObject.getJSONArray("nazwa"));

                }
            }
            catch (MalformedURLException e)
            {
                e.printStackTrace();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
        }


        return result;


    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        Toast.makeText(context, result, Toast.LENGTH_SHORT).show();
        int sizeINT = mNames.size();
        String sizeS = Integer.toString(sizeINT);
        Toast.makeText(context, sizeS, Toast.LENGTH_LONG).show();
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }
}

1
for (int i = 0;i<jsonArray.length(); i++) {
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    mNames.add(jsonObject.getString("nazwa"));
}

jak iterujesz po elementach tablicy to wywołaj na obiekcie getString a nie getJSONArray

Ogólnie jeśli chcesz sobie ułatwić życie to zainteresuj się takimi rzeczami jak GSON i Retrofit

0

Działa, dzięki !

1 użytkowników online, w tym zalogowanych: 0, gości: 1