2017-06-09 65 views
-3

我想从listview获取id,而不是位置。该ID在JSON文件中,所以当我在listview中显示数据时,所以当我点击它时,我从JSON文件中获取该驱动程序的ID。如何从ClickListener的ListView获取id值

[{的lastName = wdkj FSJ,名字= JF JFN,ID = 1},{的lastName =辛格 的firstName =晴天,ID = 2}]

public class DriverData extends AppCompatActivity { 
    private String TAG = DriverData.class.getSimpleName(); 

    ArrayAdapter<String> adapter; 
    private ProgressDialog pDialog; 
    private ListView lv; 


    // URL to get contacts JSON 
    private static String url = "http://54.148.120.200:3000/getDrivers"; 

    ArrayList<HashMap<String, String>> contactList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.driver_data); 

     contactList = new ArrayList<>(); 
     lv = (ListView) findViewById(R.id.simpleListView); 


     new DriverData.GetContacts().execute(); 


    } 

    /** 
    * Async task class to get json by making HTTP call 
    */ 
    private class GetContacts extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      // Showing progress dialog 
      pDialog = new ProgressDialog(DriverData.this); 
      pDialog.setMessage("Please wait..."); 
      pDialog.setCancelable(false); 
      pDialog.show(); 

     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      HttpHandler sh = new HttpHandler(); 

      // Making a request to url and getting response 
      String jsonStr = sh.makeServiceCall(url); 

      Log.e(TAG, "Response from url: " + jsonStr); 

      if (jsonStr != null) { 
       try { 
        JSONObject jsonObj = new JSONObject(jsonStr); 

        // Getting JSON Array node 
        JSONArray contacts = jsonObj.getJSONArray("drivers"); 

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

         String id = c.getString("id"); 
         JSONObject user = c.getJSONObject("user"); 
         String firstName = user.getString("firstName"); 
         String lastName = user.getString("lastName"); 


         // Phone node is JSON Object 


         // tmp hash map for single contact 
         HashMap<String, String> contact = new HashMap<>(); 

         // adding each child node to HashMap key => value 
         contact.put("id", id); 
         contact.put("firstName", firstName); 
         contact.put("lastName", lastName); 

         // adding contact to contact list 
         contactList.add(contact); 


        } 
       } catch (final JSONException e) { 
        Log.e(TAG, "Json parsing error: " + e.getMessage()); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Toast.makeText(getApplicationContext(), 
            "Json parsing error: " + e.getMessage(), 
            Toast.LENGTH_LONG) 
            .show(); 
         } 
        }); 

       } 
      } else { 
       Log.e(TAG, "Couldn't get json from server."); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getApplicationContext(), 
           "Couldn't get json from server. Check LogCat for possible errors!", 
           Toast.LENGTH_LONG) 
           .show(); 
        } 
       }); 

      } 
      System.out.println(contactList); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 

      // Dismiss the progress dialog 
      if (pDialog.isShowing()) 
       pDialog.dismiss(); 



      /** 
      * Updating parsed JSON data into ListView 
      * */ 

      ListAdapter adapter = new SimpleAdapter(
        DriverData.this, contactList, 
        R.layout.list_item, new String[]{"firstName", "lastName" 
      }, new int[]{R.id.name, R.id.lastName}); 
      lv.setAdapter(adapter); 

      lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 

       } 
      }); 

     } 
    } 
} 
+0

想从JSON获取ID吗? – deen

+1

尝试先学习Java以及JSON。 :) – deen

+0

当用户点击显示列表视图(具有所有的驱动程序的名字和姓氏),它有我想要的ID驱动程序的ID –

回答

1

您有它在contactList中,您可以简单地检索它。

难道这里面setOnItemClickListener()

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 
      String id=contactList.get(position).get("id"); 
      } 
     }); 
0

首先,创建保存对象,并很容易地使用这些POJO模型。

public class Contact { 

    private String id; 
    private String lastName; 
    private String firstName; 

    public Contact(String id, String lastName, String firstName) { 
     this.id = id; 
     this.lastName = lastName; 
     this.firstName = firstName; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 
} 

这简直是POJO模型类,但如果你想获得更多这方面的信息,您可以按照此link

注意:变量应该是private和方法应该是public

然后,如果您创建自己的自定义适配器会更好。

public class ListAdapter extends ArrayAdapter<Item> { 

    private List<Contact> contactList; 

    public ListAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
    } 

    public ListAdapter(Context context, int resource, List<Contact> contactList) { 
     super(context, resource, contactList); 
     this.contactList = contactList; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View v = convertView; 

     if (v == null) { 
      LayoutInflater vi; 
      vi = LayoutInflater.from(getContext()); 
      v = vi.inflate(R.layout.itemlistrow, null); 
     } 

     Item p = getItem(position); 

     if (p != null) { 
      TextView tvId = (TextView) v.findViewById(R.id.id); 
      TextView tvLastName = (TextView) v.findViewById(R.id.lastName); 
      TextView tvFirstName = (TextView) v.findViewById(R.id.firstName); 

      tvId.setText(contactList.getId()); // this will show ID 
      tvLastName.setText(contactList.getLastName()); 
      tvFirstName.setText(contactList.getFirstName()); 

     } 

     return v; 
    } 

} 

然后,从JSON链接获取所有数据后,将数据发送到构造函数。 我会更新你的源:

 try { 
       contactList = new ArrayList<Contact>; 
       JSONObject jsonObj = new JSONObject(jsonStr); 

       // Getting JSON Array node 
       JSONArray contacts = jsonObj.getJSONArray("drivers"); 

       // looping through All Contacts 
       for (int i = 0; i < contacts.length(); i++) { 
        Contact contact = new Contact(); 

        JSONObject c = contacts.getJSONObject(i); 


        JSONObject user = c.getJSONObject("user"); 
        contact.setId(c.getString("id")); 
        contact.setFirstName(user.getString("firstName")); 
        contact.setLastName(user.getString("lastName")); 

        contactList.add(contact); 


       } 
      } 

更新您的onPostExecute()法也。

@Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 

      // Dismiss the progress dialog 
      if (pDialog.isShowing()) 
       pDialog.dismiss(); 


      //System.out.println(contactList.size()); 

      /** 
      * Updating parsed JSON data into ListView 
      * */ 

      ListAdapter adapter = new ListAdapter(
        getApplicationContext(), R.layout.list_item, contactList); 
      lv.setAdapter(adapter); 
     } 

如果您有任何错误,请在此留言,我会更新。尚未测试,但我认为这将有所帮助。请享用!