2013-12-20 6 views
0

Использование getEvents (внизу) Я могу показать список событий.Android Parse JSON

{ 
    "events": [ 
     { 
      "id": "1", 
      "name": "Winter Festival", 
      "multiOperatives": "1,3" 
     }, 
     { 
      "id": "2", 
      "name": "Summer Festival", 
      "multiOperatives": "2,4" 
     } 
    ] 
} 

JSON для синтаксического анализа оперативников getOperatives

{ 
    "operatives": [ 
     { 
      "id": "1", 
      "firstName": "Operative 1" 
     }, 
     { 
      "id": "2", 
      "firstName": "Operative 2" 
     }, 
     { 
      "id": "3", 
      "firstName": "Operative 3" 
     }, 
     { 
      "id": "4", 
      "firstName": "Operative 4" 
     } 
    ] 
} 

, но теперь я не знаю как показать конкретные Оперативник только, как я хочу каждый раз, когда пользователь действительно нажмите на летнем фестивале, тогда мне просто нужно показать только два оперативных органа а именно, Оперативно 2 и 4 постановляющей ....

GetEventsActivity.java:

public class GetEventsActivity extends ListActivity { 

    // url to make request 
    private static String url = "http://myurl.tld/webservice.php?ws=getEvents&u=p&p=y"; 

    // JSON Node names 
    private static final String TAG_EVENTS = "events"; 

    private static final String TAG_ID = "id"; 
    private static final String TAG_NAME = "name"; 
    private static final String TAG_MULTI_OPERATIVES = "multiOperatives"; 

    // Alert dialog manager 
    AlertDialogManager alert = new AlertDialogManager(); 

    // Connection detector 
    ConnectionDetector cd; 

    // events JSONArray 
    JSONArray events = null; 
    String multiOperatives; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_events); 

     cd = new ConnectionDetector(getApplicationContext()); 

      // Check for internet connection 
      if (!cd.isConnectingToInternet()) { 
       // Internet Connection is not present 
       alert.showAlertDialog(GetEventsActivity.this, "Internet Connection Error", 
         "Please connect to working Internet connection", false); 
       // stop executing code by return 
       return; 
      } 

     // Hashmap for ListView 
     ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>(); 

     // Creating JSON Parser instance 
     JSONParser jParser = new JSONParser(); 

     // getting JSON string from URL 
     JSONObject json = jParser.getJSONFromUrl(url); 

     try { 
      // Getting Array of events 
      events = json.getJSONArray(TAG_EVENTS); 

      // looping through All events 
      for(int i = 0; i < events.length(); i++){ 
       JSONObject c = events.getJSONObject(i); 

       // Storing each json item in variable 
       String id = c.getString(TAG_ID); 
       String name = c.getString(TAG_NAME); 
       multiOperatives = c.getString(TAG_MULTI_OPERATIVES); 

       // creating new HashMap 
       HashMap<String, String> map = new HashMap<String, String>(); 

       // adding each child node to HashMap key => value 
       map.put(TAG_ID, id); 
       map.put(TAG_NAME, name); 
       map.put(TAG_MULTI_OPERATIVES, multiOperatives); 

       // adding HashList to ArrayList 
       contactList.add(map); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 


     /** 
     * Updating parsed JSON data into ListView 
     * */ 
     ListAdapter adapter = new SimpleAdapter(this, contactList, 
       R.layout.activity_list, 
       new String[] { TAG_NAME }, new int[] { 
         R.id.name }); 

     setListAdapter(adapter); 

     // selecting single ListView item 
     ListView lv = getListView(); 

     // Launching new screen on Selecting Single ListItem 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

       Intent intent = new Intent(GetEventsActivity.this, GetOperativesActivity.class); 
       intent.putExtra("multiOperatives", multiOperatives); 
       startActivity(intent);       
      } 
     }); 
    } 
} 

GetOperativesActivity.java:-

public class GetOperativesActivity extends ListActivity { 

    // url to make request 
    private static String url = "http://myurl.tld/webservice.php?ws=getOperatives&u=p&p=y"; 

    // JSON Node names 
    private static final String TAG_OPERATIVES = "operatives"; 

    private static final String TAG_ID = "id"; 
    private static final String TAG_NAME = "firstName"; 

    // Alert dialog manager 
    AlertDialogManager alert = new AlertDialogManager(); 

    // Connection detector 
    ConnectionDetector cd; 

    // events JSONArray 
    JSONArray events = null; 

    String multiOperatives; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_operatives); 

     if (android.os.Build.VERSION.SDK_INT > 9) { 
       StrictMode.ThreadPolicy policy = 
       new StrictMode.ThreadPolicy.Builder().permitAll().build();  
        StrictMode.setThreadPolicy(policy); 
      } 

     cd = new ConnectionDetector(getApplicationContext()); 

      // Check for internet connection 
      if (!cd.isConnectingToInternet()) { 
       // Internet Connection is not present 
       alert.showAlertDialog(GetOperativesActivity.this, "Internet Connection Error", 
         "Please connect to working Internet connection", false); 
       // stop executing code by return 
       return; 
      } 

      Intent intent = getIntent(); 
      multiOperatives = intent.getStringExtra("multiOperatives"); 

     // Hashmap for ListView 
     ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>(); 

     // Creating JSON Parser instance 
     JSONParser jParser = new JSONParser(); 

     // getting JSON string from URL 
     JSONObject json = jParser.getJSONFromUrl(url); 

     try { 
      // Getting Array of events 
      events = json.getJSONArray(TAG_OPERATIVES); 

      // looping through All events 
      for(int i = 0; i < events.length(); i++){ 
       JSONObject c = events.getJSONObject(i); 

       // Storing each json item in variable 
       String id = c.getString(TAG_ID); 
       String name = c.getString(TAG_NAME); 

       // creating new HashMap 
       HashMap<String, String> map = new HashMap<String, String>(); 

       // adding each child node to HashMap key => value 
       map.put(TAG_ID, id); 
       map.put(TAG_NAME, name); 

       // adding HashList to ArrayList 
       contactList.add(map); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 


     /** 
     * Updating parsed JSON data into ListView 
     * */ 
     ListAdapter adapter = new SimpleAdapter(this, contactList, 
       R.layout.activity_list, 
       new String[] { TAG_NAME }, new int[] { 
         R.id.name }); 

     setListAdapter(adapter); 

     // selecting single ListView item 
     ListView lv = getListView(); 

     // Launching new screen on Selecting Single ListItem 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

      } 
     }); 
    } 
} 

Используя выше код я состоянии для получения списка событий и операций, но не знаю, как показывать только требуемые операторы для п Event ..... не все Оперативники ... как я хочу каждый раз, когда пользователь этого нажмите на летнем фестивале, то я просто нужно показать только два оперативник именно Оперативно 2 и 4 постановляющей ....

+0

Вам просто нужно для отображения 'multiOperatives' с вашим идентификатором' operatives '. – SilentKiller

+0

Эй, @ СиленКиллер, привет, но запутавшись, не могли бы вы показать мне дорогу? – Sun

ответ

2

Первый модифицированный код в GetEventsActivity.java: как указано ниже

lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      multiOperatives= contactList.get(position).get(TAG_MULTI_OPERATIVES); 
      Intent intent = new Intent(GetEventsActivity.this, GetOperativesActivity.class); 
      intent.putExtra("multiOperatives", multiOperatives); 
      startActivity(intent);       
     } 
    }); 

И чем просто изменил код вашего GetOperativesActivity.java:- данного ниже

try { 

     String[] amultioperative=multiOperatives.split(","); 
     List<String> arrmultiopera= Arrays.asList(amultioperative); 

     // Getting Array of events 
     events = json.getJSONArray(TAG_OPERATIVES); 

     // looping through All events 
     for(int i = 0; i < events.length(); i++){ 
      JSONObject c = events.getJSONObject(i); 

      // Storing each json item in variable 
      String id = c.getString(TAG_ID); 
      String name = c.getString(TAG_NAME); 

      if(arrmultiopera.contains(id)){ 
      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 

      // adding each child node to HashMap key => value 
      map.put(TAG_ID, id); 
      map.put(TAG_NAME, name); 

      // adding HashList to ArrayList 
      contactList.add(map); 
     } 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
+0

теперь получает только 3 оператора, тогда как в некоторых событиях у меня есть 2, в некоторых 5, в некоторых 3 и так далее ... и магическая вещь становится такой же 3 Операторы каждый раз, я думаю, небольшая проблема здесь, проверьте еще раз – Sun

0
  1. PARSING getOperatives.json вы должны создать ArrayList из ваших Model/Beanоперативников

  2. Когда вы получаете событие щелчка на вашем listview, то вы должны получить значение для конкретного TAG_MULTI_OPERATIVES, как вы добавили в карте этого утверждением map.put(TAG_MULTI_OPERATIVES, multiOperatives);

  3. Теперь вы запятую значение, разделенной и те могут быть легко расколом на основе , и использовать значение, хранящееся в строке массиве вы можете получить конкретные данные Arraylist специфическими getter()

+0

непонятно, на самом деле путают, как и где он будет называть getOperatives.json, можете ли вы показать мне способ, поместив код – Sun

+0

Я только хочу прочитать файл getOperatives.json, как и любой другой json-файл, а затем создать Arraylist объектов из него , – Prateek

1

попробовать что-то вроде этого:

lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      TextView text = (TextView) arg1.findViewById(R.id.youroperativeid); 
      String op = text.getText().toString(); 
      String[] idsval = op.split(","); 

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

      try { 

        opers = json.getJSONArray(TAG_OPERS); 

        for(int i = 0; i < opers.length(); i++){ 
         JSONObject c = opers.getJSONObject(i); 

        String id = c.getString(TAG_ID); 
        String fname = c.getString(TAG_FNAME); 

        HashMap<String, String> map = new HashMap<String, String>(); 
         if(idsval.get(i).equals(id)){ 
        map.put(TAG_ID, id); 
        map.put(TAG_NAME, name); 
       } 

        opList.add(map); 
        } 
      } catch (JSONException e) { 
         e.printStackTrace(); 
      } 
     } 
     } 
    }); 
+0

непонятно, на самом деле путают, как и где он назовет getOperatives.json – Sun

4

Согласно моему пониманию, я отправляю мой ответ дайте мне знать, если у вас есть запрос,

  • getEvents.json вернет все события в вашей первой деятельности ,Здесь "multiOperatives": "1,3" содержит количество Operatives ID в каждом случае. Это не имеет значения, если у вас есть два Operatives ID или более того, что нравится "multiOperatives": "1,3,5,9", нам просто нужен только этот идентификатор.

  • Когда вы нажмете на мероприятие, вы измените свою деятельность с информацией о событиях.

  • На этом этапе вы вызываете getOperatives, и это вернет все Operatives, что не очень хорошо.

  • Pass Оперативникам Умышленное как показано ниже,

    Intent intent = new Intent(GetEventsActivity.this, GetOperativesActivity.class); intent.putExtra("multiOperatives", multiOperatives); startActivity(intent);

    и GetOperativesActivity.java, с помощью этого:

    Intent intent = getIntent(); multiOperatives = intent.getStringExtra("multiOperatives");

  • Теперь вы просто должны пройти, что Operatives ID когда вам позвоните getOperatives, чтобы вернуть только возврат ID Operatives.

  • http://YOUR_URL/getOperatives.json?Operatives_ID="+multiOperatives

  • Просто вам нужно изменить в запросе WEB-API и что изменит ваш веб-разработчик.