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