2017-05-08 229 views
0

目前我的代碼只能選擇一個聯繫人並顯示在所選的editText中,並且在按鈕添加點擊之後,詳細信息將被插入到數據庫中。 現在我想選擇多個聯繫人並插入他們到數據庫中。對我來說,實現這個最好的方法是什麼?選擇多個聯繫人姓名和電話號碼

下面是我目前的代碼。

public class newBill extends AppCompatActivity implements View.OnClickListener{ 

    //Defining views 
    private EditText description; 
    private EditText person_engaged; 
    private EditText amount; 
    private EditText contact; 
    private String username; 
    private Button buttonAdd; 
    private Button buttonView; 


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

     ((Button)findViewById(R.id.btnBrowse)).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 

       intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
       startActivityForResult(intent, 1); 
      } 
     }); 

     //Initializing views 

     description = (EditText) findViewById(R.id.description); 
     person_engaged = (EditText) findViewById(R.id.person_engaged); 
     amount = (EditText) findViewById(R.id.amount); 
     contact=(EditText) findViewById(R.id.person_engaged_contact); 

     buttonAdd = (Button) findViewById(R.id.buttonAdd); 
     buttonView = (Button) findViewById(R.id.buttonView); 

     //Setting listeners to button 
     buttonAdd.setOnClickListener(this); 
     buttonView.setOnClickListener(this); 
    } 

    //get contact picker 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (data != null) { 
      Uri uri = data.getData(); 

      if (uri != null) { 
       Cursor c = null; 
       try { 
        c = getContentResolver().query(uri, new String[]{ 
            ContactsContract.CommonDataKinds.Phone.NUMBER, 
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME }, 
          null, null, null); 

        if (c != null && c.moveToFirst()) { 
         String number = c.getString(0); 
         String name = c.getString(1); 
         showSelectedNumber(name, number); 
        } 
       } finally { 
        if (c != null) { 
         c.close(); 
        } 
       } 
      } 
     } 
    } 

    public void showSelectedNumber(String name, String number) { 
     Toast.makeText(this, name + ": " + number, Toast.LENGTH_LONG).show(); 
     person_engaged.setText(name); 
     contact.setText(number); 

    } 

    //Adding an bill 
    private void addBills(){ 

     final String desc = description.getText().toString().trim(); 
     final String person = person_engaged.getText().toString().trim(); 
     final String amo = amount.getText().toString().trim(); 
     final String contacts = contact.getText().toString().trim(); 

     //Fetching username from shared preferences 
     SharedPreferences sharedPreferences = getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE); 
     username = sharedPreferences.getString(Config.USERNAME_SHARED_PREF,"Not Available"); 

     final String currentUser = username.toString().trim(); 

     class AddBills extends AsyncTask<Void,Void,String>{ 

      ProgressDialog loading; 

      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       loading = ProgressDialog.show(newBill.this,"Adding...","Wait...",false,false); 
      } 

      @Override 
      protected void onPostExecute(String s) { 
       super.onPostExecute(s); 
       loading.dismiss(); 
       Toast.makeText(newBill.this,s,Toast.LENGTH_LONG).show(); 
       description.getText().clear(); 
       person_engaged.getText().clear(); 
       amount.getText().clear(); 
       contact.getText().clear(); 

      } 

      @Override 
      protected String doInBackground(Void... v) { 
       HashMap<String,String> params = new HashMap<>(); 
       params.put(Config.KEY_DESCRIPTION,desc); 
       params.put(Config.KEY_PERSON_ENGAGED,person); 
       params.put(Config.KEY_AMOUNT,amo); 
       params.put(Config.KEY_PERSON_ENGAGED_CONTACT,contacts); 
       params.put(Config.KEY_CREATED_BY_NAME,currentUser); 

       RequestHandler rh = new RequestHandler(); 
       String res = rh.sendPostRequest(Config.URL_ADD, params); 
       return res; 
      } 
     } 

     AddBills ae = new AddBills(); 
     ae.execute(); 
    } 

    @Override 
    public void onClick(View v) { 
     if(v == buttonAdd){ 
      addBills(); 
     } 

     if(v == buttonView){ 
      startActivity(new Intent(this,ViewAllBills.class)); 
     } 
    } 

    //for sending direct sms notification 
    public void sendSMS(String phoneNo, String msg) { 
     try { 
      SmsManager smsManager = SmsManager.getDefault(); 
      smsManager.sendTextMessage(phoneNo, null, msg, null, null); 
      Toast.makeText(getApplicationContext(), "Message Sent", 
        Toast.LENGTH_LONG).show(); 
     } catch (Exception ex) { 
      Toast.makeText(getApplicationContext(),ex.getMessage().toString(), 
        Toast.LENGTH_LONG).show(); 
      ex.printStackTrace(); 
     } 
    } 
} 
+0

嘗試[Android的聯繫人提取器(https://github.com/ nitiwari-dev/android-contact-extractor)以聯繫人列表的形式獲取聯繫人輸出 – nitesh

回答

0

您不能使用Intent.ACTION_GET_CONTENT意圖挑選多個聯繫人。 您可以自己查詢所有聯繫人及其電話號碼,將其顯示在用戶的ListView中,並允許用戶在自己的應用程序中選擇聯繫人。

要查詢電話的聯繫人(如果需要你使用runtime-permissionsContacts許可),你可以這樣做:

List<String> allPhones = new ArrayList<>(); 
// The Phone class should be imported from CommonDataKinds.Phone 
Cursor cursor = getContentResolver().query(Phone.CONTENT_URI, new String[] { Phone.DISPLAY_NAME, Phone.NUMBER }, Phone.IN_VISIBLE_GROUP + "=1", null, Phone.TIMES_CONTACTED + " DESC"); 
while (cursor != null && cursor.moveToNext()) { 
    String name = cursor.getString(0); 
    String number = cursor.getString(1); 
    allPhones.add(name + " - " + number); 
} 
// display allPhones in a ListView on screen, and handle item clicks 
相關問題