Prawidłowość JSON-a

0

Witam ! Mam do was prośbę. Czy ten JSON jest prawidłowy ? Pobieram go ze skryptu PHP

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

W przeglądarce pokazuje mi się on w jednej linijce. Pytam się o to, ponieważ w aplikacji na androida, gdy próbuje pobrać dane do aplikacji ( do tablicy ) to przy wywołaniu size() pokazuje mi 0 i nie wiem czy zły jest JSON czy coś w aplikacji.

0

JSON jest spoko, pokaż kod w Javie.

0
package bjd.adrian.shopserach;

import android.content.Context;
import android.os.AsyncTask;
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];
        if(type.equals("serach"))
        {
            String result = "";
            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;
                }

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

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

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

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

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


        return null;


    }

    @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);
    }
}
0

W pierwszym bloku try-catch masz return result;, więc nawet nie parsujesz tego JSONa.

0

Czyli jak ma to wyglądać ? Próbowałem już wielu sposobów I dalej nie działa.

0

Spróbuj tak:

package bjd.adrian.shopserach;
 
import android.content.Context;
import android.os.AsyncTask;
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];
        if(type.equals("serach"))
        {
            String result = "";
            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;
                }
 
                bufferedReader.close();
                inputStream.close();
                httpURLConnection.disconnect();
 
                JSONArray jsonArray = new JSONArray(result);
                    for (int i = 0;i<jsonArray.length(); i++)
                    {
 
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        mNames.add(jsonObject.getJSONArray("name"));
 
                    }
            }
            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);
    }
}
0

Tam gdzie ty dałeś "return result" mi podkreśla to na czerwono

0

Troche samodzielności :( Kopiowałem kod, więc zapomniałem o zamknięciu if'a. Plus wyciągnij deklaracje result przed ifa..

0

Dalej .size() pokazuje 0

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