2015-03-01 5 views
0

Я пытаюсь загрузить этот список объектов из json в android. Это JSon файлуparsing json object to android

{"cofee":[{"ID":"1","name":"top1"},{"ID":"2","name":"top2"}]} 

Я использую этот фрагмент, чтобы загрузить массив JSON.

@SuppressLint("NewApi") 
    public class east extends Fragment { 
    ListView list; 
    TextView id; 
    TextView name; 
    Button Btngetdata; 

    ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>(); 

    //URL to get JSON Array 
    private static String url = "http://url.com/east.php"; 

    //JSON Node Names 
    private static final String TAG_ARRAY = "coffee"; 
    private static final String TAG_ID = "ID"; 
    private static final String TAG_NAME = "name"; 

    JSONArray coffee = null; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.east_fragment, container, false); 

    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onActivityCreated(savedInstanceState); 

     oslist = new ArrayList<HashMap<String, String>>(); 
     Btngetdata = (Button)getView().findViewById(R.id.getdata); 
     Btngetdata.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       new JSONParse().execute(); 
      } 
     }); 

    } 

    private class JSONParse extends AsyncTask<String, String, JSONObject> { 

     private ProgressDialog pDialog; 
     JsonParser jParser = new JsonParser(); 
     private JSONObject json; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      name = (TextView)getView().findViewById(R.id.name); 
      id = (TextView)getView().findViewById(R.id.id); 

      pDialog = new ProgressDialog(getActivity()); 
      pDialog.setMessage("Getting Data ..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 


     } 

     @Override 
     protected JSONObject doInBackground(String... args) { 

      // Getting JSON from URL 
      json = jParser.getJSONFromUrl(url); 

      return json; 
     } 

     @Override 
     protected void onPostExecute(JSONObject json) { 

      pDialog.dismiss(); 
      try { 
       // Getting JSON Array from URL 
       coffee = json.getJSONArray(TAG_ARRAY); 

       for(int i = 0; i < coffee.length(); i++){ 

        JSONObject c = coffee.getJSONObject(i); 

        // Storing JSON item in a Variable 
        String ID = c.getString(TAG_ID); 
        String name = c.getString(TAG_NAME); 

        // Adding value HashMap key => value 
        HashMap<String, String> map = new HashMap<String, String>(); 
        map.put(TAG_ID, ID); 
        map.put(TAG_NAME, name); 

        oslist.add(map); 

        list = (ListView)getView().findViewById(R.id.listView1); 

        ListAdapter adapter = new SimpleAdapter(getActivity(), oslist, 
         R.layout.list_item, 
         new String[] { TAG_ID, TAG_NAME }, new int[] { 
          R.id.id, R.id.name}); 
        list.setAdapter(adapter); 
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
         @Override 
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
          Toast.makeText(getActivity(), "You Clicked at "+oslist.get(+position).get("name"), Toast.LENGTH_SHORT).show(); 
         } 
        }); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

Но когда я запустил приложение, в моем списке ничего нет. Вот это LogCat:

03-01 22:23:04.799: W/System.err(3348): org.json.JSONException: No value for coffee 
03-01 22:23:04.809: W/System.err(3348): at org.json.JSONObject.get(JSONObject.java:354) 
03-01 22:23:04.809: W/System.err(3348): at org.json.JSONObject.getJSONArray(JSONObject.java:548) 
03-01 22:23:04.809: W/System.err(3348): at com.mmmmmm.slidingmenu.slidinglist.east$JSONParse.onPostExecute(east.java:109) 
03-01 22:23:04.809: W/System.err(3348): at com.mmmmmm.slidingmenu.slidinglist.east$JSONParse.onPostExecute(east.java:1) 
03-01 22:23:04.809: W/System.err(3348): at android.os.AsyncTask.finish(AsyncTask.java:631) 
03-01 22:23:04.809: W/System.err(3348): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
03-01 22:23:04.809: W/System.err(3348): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
03-01 22:23:04.809: W/System.err(3348): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-01 22:23:04.809: W/System.err(3348): at android.os.Looper.loop(Looper.java:213) 
03-01 22:23:04.809: W/System.err(3348): at android.app.ActivityThread.main(ActivityThread.java:5225) 
03-01 22:23:04.809: W/System.err(3348): at java.lang.reflect.Method.invokeNative(Native Method) 
03-01 22:23:04.809: W/System.err(3348): at java.lang.reflect.Method.invoke(Method.java:525) 
03-01 22:23:04.809: W/System.err(3348): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741) 
03-01 22:23:04.809: W/System.err(3348): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
03-01 22:23:04.809: W/System.err(3348): at dalvik.system.NativeStart.main(Native Method) 

App легко подключается к серверу, но я новичок и не мог понять, почему он не может загрузить JSon Arry ?? !! не

+0

Может быть, в формате JSON это пишется 'cofee', но в коде это написано «кофе»? – jonhopkins

+0

похоже, что у вашего Джейсона есть 'cofee', а не' coffee'. –

+0

глупо меня. это было ошибкой написания в json-массиве. Спасибо, парни – alireza

ответ

0

"Нет значение для кофе"

  • Пожалуйста, проверьте JSON.
  • Вы проверяете свой JSon в JSON Formatter & Validator
  • Если это именно тот тип JSON, нужно проверить код или использовать GSON