JSON parsing application "no data"?

Here is the code for my JSON analysis. This action closes as soon as I run it on the emulator. I am new to Android programming and I teach myself, so please bear with me. Thanks!

JSONfunctions.java:

package com.pxr.tutorial.json; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.util.Log; public class JSONfunctions { public static JSONObject getJSONfromURL(String url){ InputStream is = null; String result = ""; JSONObject jArray = null; //http post try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); }catch(Exception e){ Log.e("log_tag", "Error in http connection "+e.toString()); } //convert response to string try{ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result=sb.toString(); }catch(Exception e){ Log.e("log_tag", "Error converting result "+e.toString()); } try{ jArray = new JSONObject(result); }catch(JSONException e){ Log.e("log_tag", "Error parsing data "+e.toString()); } return jArray; } } 

Main.java:

 package com.pxr.tutorial.json; import java.util.ArrayList; import java.util.HashMap; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import com.pxr.tutorial.xmltest.R; import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class Main extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listplaceholder); ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>> (); JSONObject json = JSONfunctions.getJSONfromURL ("http://www.tastekid.com/ask/ws?q=mosdef&f=musifin2125&k=mjjlnzkyzwuz&format=JSON"); try{ JSONArray similar = json.getJSONArray("similar"); for(int i=0;i<similar.length();i++){ HashMap<String, String> map = new HashMap<String, String>(); JSONObject e = similar.getJSONObject(i); map.put("id", String.valueOf(i)); map.put("name", "Name:" + e.getString("name")); map.put("type", "Type: " + e.getString("type")); mylist.add(map); } }catch(JSONException e) { Log.e("log_tag", "Error parsing data "+e.toString()); } ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, new String[] { "name", "type" }, new int[] { R.id.item_title, R.id.item_subtitle }); setListAdapter(adapter); final ListView lv = getListView(); lv.setTextFilterEnabled(true); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { @SuppressWarnings("unchecked") HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position); Toast.makeText(Main.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show(); } }); } } 

EDIT - Fixed unhandled exception, but now it says β€œNo data” when I try to parse the URL.

Thanks again!

0
source share
2 answers

Here are your mistakes:

JSONArray similar = json.getJSONArray("similar");

  • When parsing JSON, you should notice that it is case sensitive , I see that your json object is Similiar , but you are trying to get it as Similiar .
  • Similiar is a JSON object, but you are trying to get it as a JSONArray

Here is the fix for your codes, I give you a fix to get Info inside the Similiar object:

  JSONObject earthquakes = json.getJSONObject("Similar"); JSONArray info = earthquakes.getJSONArray("Info"); for (int i = 0; i < info.length(); i++) { HashMap<String, String> map = new HashMap<String, String>(); JSONObject e = info.getJSONObject(i); map.put("id", String.valueOf(i)); map.put("name", "Name:" + e.getString("Name")); map.put("type", "Type: " + e.getString("Type")); mylist.add(map); } 

Replace the code block inside try after JSONObject json = JSONFun.getJSONfromURL("http://www.tastekid.com/ask/ws? q=mosdef&f=musifin2125&k=mjjlnzkyzwuz&format=JSON"); with the code above.

0
source

You have added a permission tag to the manifest file, which allows you to use the Internet

0
source

Source: https://habr.com/ru/post/1389602/


All Articles