0

I'm trying to parse JSON from this

string x = "http://www.neowsapp.com/rest/v1/neo/3725762?api_key=DEMO_KEY"; 

In the browser I can see all the data from this link, but in the parsing method, it can't be converted to a JSONObject.

The error is in this line, in the Utilsul class:

 root = new JSONObject(x);

Here is the class containing all the methods for parsing:

public class Utilsul {
    private static URL createURL(String x){
        URL myurl = null;
        try {
            myurl = new URL(x);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
       // Log.i("obtine link ", myurl.toString());
        return myurl;
    }


    private static String raspunsul(URL myurl){
        String rasp = "";
        HttpURLConnection httpURLConnection = null;
        InputStream inputStream = null;
        try {
            httpURLConnection = (HttpURLConnection) myurl.openConnection();
            inputStream = httpURLConnection.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String liniaCurenta = "";
            StringBuffer stringBuffer = new StringBuffer();
            while ((liniaCurenta = bufferedReader.readLine())!=null){
                stringBuffer.append(liniaCurenta);

            }
            rasp = stringBuffer.toString();
            bufferedReader.close();
            inputStreamReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            if (inputStream != null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            httpURLConnection.disconnect();
        }
      //  Log.i("Obtine Raspuns", rasp);
        return rasp;
    }


    private static ArrayList<Obiectul> obtineSir(String x){
        ArrayList<Obiectul> sirul = new ArrayList<>();
        JSONObject root = null;
        try {
             root = new JSONObject(x);
          //  Log.i("Obtine root ", root.toString());
            JSONArray sirJONURI = root.getJSONArray("close_approach_data");
            for (int i=0; i<sirJONURI.length(); i++){
                JSONObject obiectCurent = sirJONURI.getJSONObject(i);
                String data = obiectCurent.getString("close_approach_date");

                JSONObject jsonViteza = obiectCurent.getJSONObject("relative_velocity");
                String viteza = jsonViteza.getString("kilometers_per_hour");

                JSONObject jsonDistanta = obiectCurent.getJSONObject("miss_distance");
                String distanta = jsonDistanta.getString("kilometers");
                sirul.add(new Obiectul(data, viteza, distanta));
            }

        } catch (JSONException e) {

            e.printStackTrace();
        }
    return  sirul;
    }


    public static ArrayList<Obiectul> toateOdata(String x){
        URL ur = createURL(x);
        String raspuns = raspunsul(ur);
        ArrayList<Obiectul> sir = obtineSir(raspuns);
        return sir;
    }

}

And here is the class where the parsing will be execute:

public class ActivityB extends AppCompatActivity {

    RecyclerView rv;
    AdaptorRecycler mAdapter;
    ArrayList<Obiectul> sirul;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);

        rv = findViewById(R.id.toataLista);
        rv.setLayoutManager(new LinearLayoutManager(this));

        ClasaAsy clasaAsy = new ClasaAsy();
        clasaAsy.execute(linkul());

    }


    private String linkul(){
        String link = "http://www.neowsapp.com/rest/v1/neo/3725762?api_key=DEMO_KEY";
        return link;
    }

    public class ClasaAsy extends AsyncTask<String, Void, ArrayList<Obiectul>>{

        @Override
        protected ArrayList<Obiectul> doInBackground(String... strings) {
            ArrayList<Obiectul> sir = Utilsul.toateOdata(strings[0]);
            return sir;
        }

        @Override
        protected void onPostExecute(ArrayList<Obiectul> obiectuls) {
            mAdapter = new AdaptorRecycler(ActivityB.this, obiectuls);
            rv.setAdapter(mAdapter);
        }
    }

And here is the Adapter for the RecyclerView (which is tested working, with an ArrayList randomly written).

public class AdaptorRecycler  extends RecyclerView.Adapter<AdaptorRecycler.ClasaVH> {

    Context context;
    ArrayList<Obiectul> sirul;

    public AdaptorRecycler(Context context, ArrayList<Obiectul> sirul) {
        this.context = context;
        this.sirul = sirul;
    }

    public class ClasaVH extends RecyclerView.ViewHolder{

        TextView data, viteza, distanta;
        public ClasaVH(@NonNull View itemView) {
            super(itemView);
            data = itemView.findViewById(R.id.textView2);
            viteza = itemView.findViewById(R.id.textView3);
            distanta = itemView.findViewById(R.id.textView4);
        }
    }


    @NonNull
    @Override
    public ClasaVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new ClasaVH(LayoutInflater.from(context).inflate(R.layout.randul, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull ClasaVH holder, int position) {
        Obiectul a = sirul.get(position);
        holder.data.setText(a.getData());
        holder.viteza.setText(a.getViteza());
        holder.distanta.setText(a.getDistanta());
    }

    @Override
    public int getItemCount() {
        return sirul.size();
    }
}

For some reason, the JSONObject root is never initialised and I couldn't find why.

Please kindly give me an idea, what else should I try.

Thanks

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Monica
  • 1

0 Answers0