2017-08-09 8 views
0

私はJSON Arrayを持っています。私の電話帳には、私のアプリのユーザーでもある連絡先がいくつかあります。たとえば、JSONの配列は次のようになります。JSON Arrayの値をListViewの他の値と区別するにはどうすればよいですか?

[{"contact_phonenumber":"11111"},{"contact_phonenumber":"22222"},{"contact_phonenumber":"33333"}] 

phoneNumberofContactを以下の私のコードでdo声明の中で、自分の携帯電話内のすべての連絡先を返し、文字列です。どのphoneNumberofContactの番号がJSON Arrayに表示されているかを確認するにはどうすればいいですか?ListViewの連絡先に加えて、 ' - app user'という単語を入力します。 。私のListViewは、私はちょうどこの機能を追加したい、正常に動作している

をので、例えば、数​​のために私は私のListViewでなければなりません:

Joe Blogs - app user 
11111 

をここに私のコードです:

JSONArray jsonArrayContacts = response; 
//response is something like [{"contact_phonenumber":"11111"}, etc...] 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_new_contact); 


     //selectPhoneContacts is an empty array list that will hold our SelectPhoneContact info 
     selectPhoneContacts = new ArrayList<SelectPhoneContact>(); 

     listView = (ListView) findViewById(R.id.listviewPhoneContacts); 

} 


//******for the phone contacts in the listview 

    // Load data in background 
    class LoadContact extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected Void doInBackground(Void... voids) { 


//   we want to delete the old selectContacts from the listview when the Activity loads 
//   because it may need to be updated and we want the user to see the updated listview, 
//   like if the user adds new names and numbers to their phone contacts. 
      selectPhoneContacts.clear(); 

//   we have this here to avoid cursor errors 
      if (cursor != null) { 
       cursor.moveToFirst(); 

      } 


      try { 

//    get a handle on the Content Resolver, so we can query the provider, 
       cursor = getApplicationContext().getContentResolver() 
//    the table to query 
       .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
           null, 
           null, 
           null, 
//    display in ascending order 
       ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 

//    get the column number of the Contact_ID column, make it an integer. 
//    I think having it stored as a number makes for faster operations later on. 
//    get the column number of the DISPLAY_NAME column 
       int nameIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 
//     get the column number of the NUMBER column 
       int phoneNumberofContactIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 

       cursor.moveToFirst(); 

//    We make a new Hashset to hold all our contact_ids, including duplicates, if they come up 
       Set<String> ids = new HashSet<>(); 

       do { 

        System.out.println("=====>in while"); 

//      get a handle on the display name, which is a string 
        name = cursor.getString(nameIdx); 

//      get a handle on the phone number, which is a string 
        phoneNumberofContact = cursor.getString(phoneNumberofContactIdx); 


        //---------------------------------------------------------- 


        // get a handle on the phone number of contact, which is a string. Loop through all the phone numbers 
//     if our Hashset doesn't already contain the phone number string, 
//     then add it to the hashset 
        if (!ids.contains(phoneNumberofContact)) { 
         ids.add(phoneNumberofContact); 

           SelectPhoneContact selectContact = new SelectPhoneContact(); 

           selectContact.setName(name); 
           selectContact.setPhone(phoneNumberofContact); 
           selectPhoneContacts.add(selectContact); 
          } 

       } while (cursor.moveToNext()); 


      } catch (Exception e) { 
       Toast.makeText(NewContact.this, "what the...", Toast.LENGTH_LONG).show(); 
       e.printStackTrace(); 
       // cursor.close(); 
      } finally { 

      } 


    if (cursor != null) { 
     cursor.close(); 

    } 
    return null; 
} 


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

      adapter = new SelectPhoneContactAdapter(selectPhoneContacts, NewContact.this); 

//     we need to notify the listview that changes may have been made on 
//     the background thread, doInBackground, like adding or deleting contacts, 
//     and these changes need to be reflected visibly in the listview. It works 
//     in conjunction with selectContacts.clear() 
      adapter.notifyDataSetChanged(); 

      listView.setAdapter(adapter); 

     } 
    } 
最初に

答えて

1

、あなたはリストにjsonArrayContactsを解析することができます

final List<String> responseContacts = new ArrayList<String>(); 
        try { 
         JSONArray responseObject = new JSONArray(response); 
         for (int i = 0; i < responseObject.length(); i++) { 
          final JSONObject obj = responseObject.getJSONObject(i); 
          responseContacts.add(obj.getString("contact_phonenumber")); 
         } 
         // System.out.println("the matching contacts of this user are :" + responseContacts); 

        } catch(Exception e) { 
         e.printStackTrace(); 
        } 

あなたのローカルの連絡先を取得したら、2つの連絡先のセットがあるので、jsonアレイの連絡先に表示されている番号を確認するのは簡単です。 そして、初期化中にresponseContactsSelectPhoneContactAdapterに渡すことができます。また、アダプタのgetView()メソッドでは、アイテムビューに「 - app user」という単語を入れる必要があるかどうかを知ることができます。

+0

いいね、私はこの晩を実装し、私がどのように乗っているかを教えてくれます。 – CHarris

+0

素晴らしい!私はあなたの結果を楽しみにしています! – vesper

+0

あなたのコードは動作します - それを少し修正して編集しました。それは私の目的を達成するための正しい道だと思います。アダプタとgetView()の部分を見て、受け入れると答えます。 – CHarris

関連する問題