2016-06-18 5 views
1

Hier habe ich Zugriff auf Kontakte vom Telefon und Anzeige in benutzerdefinierten Listenansicht. Nun muss ich die ausgewählten checkbox Werte zu verschiedenen Zeilen mysql Datenbank einfügen.Hier kann ich einzelne Checkbox Wert in die Datenbank einfügen..wenn ich mehr als einen Wert ausgewählt haben, werden die Daten in der einzelnen Zeile gespeichert .. Welche Änderungen muss ich vornehmen, um die einzelnen Daten in jede Zeile einzufügen? Ich verwende eine PHP-Datei, um Daten in der Datenbank zu speichern.Wie man mehrere Checkbox-Werte in verschiedene Zeilen in die MySQL-Datenbank in Android und PHP einfügt

DisplayContact.java

public class DisplayContact extends Activity implements OnItemClickListener{ 

    //ArrayList to store name and phone number 
    List<String> name1 = new ArrayList<String>(); 
    List<String> phno1 = new ArrayList<String>(); 
    MyAdapter ma ; 
    Button select; 

    private String vault; 

    public static final String kvault = "vault_no"; 
    public static final String kname = "name"; 
    public static final String kphone = "phone"; 

    public static final String SHARED_PREF_NAME = "myloginapp"; 


    public static final String CONTACTNAME_SHARED_PREF = "name"; 
    public static final String PHONE_SHARED_PREF = "phone"; 

    //We will use this to store the boolean in sharedpreference to track user is loggedin or not 
    public static final String LOGGEDIN_SHARED_PREF = "loggedin"; 

    public static final String UPLOAD_URL = "http://oursite.com/contacts.php"; 

    Cursor phones; 

    private static final int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getActionBar().setDisplayShowTitleEnabled(false); 
     setContentView(R.layout.display); 

     SharedPreferences sharedPreferences = getSharedPreferences(ProfileLogin.SHARED_PREF_NAME, MODE_PRIVATE); 

     vault = sharedPreferences.getString(ProfileLogin.EMAIL_SHARED_PREF,"Not Available"); 

     getAllContacts(this.getContentResolver()); 
     ListView lv= (ListView) findViewById(R.id.lv); 
     ma = new MyAdapter(); 
     lv.setAdapter(ma); 
     lv.setOnItemClickListener(this); 
     lv.setItemsCanFocus(false); 
     lv.setTextFilterEnabled(true); 
     // adding 
     select = (Button) findViewById(R.id.button1); 
     select.setOnClickListener(new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View v) { 
       StringBuilder checkedcontacts= new StringBuilder(); 
       StringBuilder name2 = new StringBuilder(); 
       StringBuilder phone2 = new StringBuilder(); 
       for(int i = 0; i < name1.size(); i++) 

       { 
        if(ma.mCheckStates.get(i)==true) 
        { 
         checkedcontacts.append(name1.get(i).toString()); 
         checkedcontacts.append(phno1.get(i).toString()); 
         checkedcontacts.append("\n"); 

         name2.append(name1.get(i).toString()); 
         phone2.append(phno1.get(i).toString()); 
        } 
        else 
        { 

        } 
       } 
       SharedPreferences sharedPreferences = DisplayContact.this.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); 

       //Creating editor to store values to shared preferences 
       SharedPreferences.Editor editor = sharedPreferences.edit(); 

       //Adding values to editor 
       editor.putBoolean(LOGGEDIN_SHARED_PREF, true); 
       editor.putString(CONTACTNAME_SHARED_PREF, name2.toString()); 
       editor.putString(PHONE_SHARED_PREF, phone2.toString()); 

       //Saving values to editor 
       editor.commit(); 

       Toast.makeText(DisplayContact.this, name2.toString() + " , " + phone2.toString() + " Added to Database", Toast.LENGTH_LONG).show(); 
       uploadImage(); 
      } 
     }); 

    } 

    public void uploadImage(){ 

     SharedPreferences sharedPreferences = getSharedPreferences(DisplayContact.SHARED_PREF_NAME, MODE_PRIVATE); 

     final String name = sharedPreferences.getString(DisplayContact.CONTACTNAME_SHARED_PREF, "Not Available"); 
     final String phone = sharedPreferences.getString(DisplayContact.PHONE_SHARED_PREF, "Not Available"); 

     final String vault_no = vault; 

     class UploadImage extends AsyncTask<Void,Void,String> { 
      ProgressDialog loading; 
      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       loading = ProgressDialog.show(DisplayContact.this,"Please wait...","uploading",false,false); 
      } 

      @Override 
      protected void onPostExecute(String s) { 
       super.onPostExecute(s); 
       loading.dismiss(); 
       if(s.equalsIgnoreCase("Successfully Saved")){ 
        //Intent intent = new Intent(CollegeDetails.this,Work.class); 
        Toast.makeText(DisplayContact.this, s, Toast.LENGTH_SHORT).show(); 
        // startActivity(intent); 
       }else{ 
        Toast.makeText(DisplayContact.this,s,Toast.LENGTH_SHORT).show(); 

       } 
      } 

      @Override 
      protected String doInBackground(Void... params) { 
       RequestHandler rh = new RequestHandler(); 
       //RegisterUserClass rh = new RegisterUserClass(); 
       HashMap<String,String> param = new HashMap<String,String>(); 

       param.put(kvault,vault_no); 
       param.put(kname,name); 
       param.put(kphone,phone); 

       String result = rh.sendPostRequest(UPLOAD_URL, param); 
       return result; 
      } 
     } 
     UploadImage u = new UploadImage(); 
     u.execute(); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     // TODO Auto-generated method stub 
     ma.toggle(arg2); 
    } 

    public void getAllContacts(ContentResolver cr) { 

     int result = ContextCompat.checkSelfPermission(DisplayContact.this, Manifest.permission.READ_CONTACTS); 
     if (result == PackageManager.PERMISSION_GRANTED){ 

      phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 
      contactsdisplay(); 

     } else { 

      requestForLocationPermission(); 
     } 
    } 

    private void requestForLocationPermission() 
    { 

     if (ActivityCompat.shouldShowRequestPermissionRationale(DisplayContact.this, Manifest.permission.READ_CONTACTS)) 
     { 
     } 
     else { 

      ActivityCompat.requestPermissions(DisplayContact.this, new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS); 
     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) 
    { 
     switch (requestCode) { 
      case MY_PERMISSIONS_REQUEST_READ_CONTACTS: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) 
       { 
        getAllContacts(DisplayContact.this.getContentResolver()); 
        contactsdisplay(); 
       } 
       break; 
     } 
    } 

    public void contactsdisplay() { 


     while (phones.moveToNext()) 
     { 
      String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      System.out.println(".................."+name+ "" +phoneNumber); 
      name1.add(name); 
      phno1.add(phoneNumber); 
     } 

     phones.close(); 
    } 

    class MyAdapter extends BaseAdapter implements CompoundButton.OnCheckedChangeListener 
    { private SparseBooleanArray mCheckStates; 
     LayoutInflater mInflater; 
     TextView tv1,tv; 
     CheckBox cb; 
     MyAdapter() 
     { 
      mCheckStates = new SparseBooleanArray(name1.size()); 
      mInflater = (LayoutInflater)DisplayContact.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 
     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return name1.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 

      return 0; 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      View vi=convertView; 
      if(convertView==null) 
       vi = mInflater.inflate(R.layout.row, null); 
      tv= (TextView) vi.findViewById(R.id.contact_name); 
      tv1= (TextView) vi.findViewById(R.id.phone_number); 
      cb = (CheckBox) vi.findViewById(R.id.checkBox_id); 
      tv.setText("Name :"+ name1.get(position)); 
      tv1.setText("Phone No :"+ phno1.get(position)); 
      cb.setTag(position); 
      cb.setChecked(mCheckStates.get(position, false)); 
      cb.setOnCheckedChangeListener(this); 

      return vi; 
     } 
     public boolean isChecked(int position) { 
      return mCheckStates.get(position, false); 
     } 

     public void setChecked(int position, boolean isChecked) { 
      mCheckStates.put(position, isChecked); 
     } 

     public void toggle(int position) { 
      setChecked(position, !isChecked(position)); 
     } 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
            boolean isChecked) { 
      // TODO Auto-generated method stub 

      mCheckStates.put((Integer) buttonView.getTag(), isChecked); 
     } 
    } 
} 

kontakte.php

<?php 
    session_start(); 
    define('HOST','hostname'); 
    define('USER','username'); 
    define('PASS','password'); 
    define('DB','dbname'); 

    $response = array(); 

$con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect'); 

if(!mysqli_connect_errno()){ 

    $error_flag = false; 

$contacts = json_decode($_POST['contacts'], true); 
foreach($contacts as $contact){ 
    //echo $contact['name']; 


      // create a new user profile 
     $sql = "INSERT INTO contacts (vault_no , name, phone, update_at,created_at) 
     VALUES ('".$contact['vault_no']."', '".$contact['name']."', '".$contact['phone']."', NOW(), NOW())"; 
      if(mysqli_query($con,$sql)){ 

       echo "Successfully Saved"; 

      }else{ 
       $response["error"] = true; 
       $response["error_msg"] = "INSERT operation failed"; 
       echo json_encode($response); 
      } 
} 

}else{ 
    $response["error"] = true; 
    $response["error_msg"] = "Database connection failed"; 
    echo json_encode($response); 
} 

?>

+0

Möchten Sie jeden Kontrollkästchenwert in eine separate Zeile einfügen ODER alle Kontrollkästchen (markiert) in einer Zeile speichern? – Gopalakrishnan

+0

Ich möchte jedes Kontrollkästchen Wert in einer separaten Zeile gespeichert werden ... jetzt speichert es alle Wert in einer Zeile .. –

Antwort

1

Sie müssen JSON beginnen, Ihre Daten zu halten:

Build it:

HashMap<String,String> param = new HashMap<String,String>(); 
param.put(kcontacts,contacts.toString()); 
return rh.sendPostRequest(UPLOAD_URL, param); 

Endlich:

JSONArray contacts = new JSONArray(); 
for(int i = 0; i < name1.size(); i++) 
{ 
    JSONObject contact = new JSONObject(); 
    contact.put(kname, name1.get(i).toString()); 
    contact.put(kphone, phno1.get(i).toString()); 
    contact.put(kvault,vault_no); 
    contacts.put(contact); 
} 

Dann ist es zu Ihrem hashmap als Parameter übergeben in PHP dekodieren, dass:

$contacts = json_decode($_POST['contacts'], true); 
foreach($contacts as $contact){ 
    echo $contact['name']; 
} 
+0

Ich erhalte Fehler bei 'contact.put (kname, name1.get (i) .toString()) ;. so weiter .. .. als unbehandelt exception: org.json.JsonException..Ich habe JSONArray in doInBackground-Methode verwendet .. –

+0

Ich habe hinzugefügt versuchen, catch block to handle exception..und ich habe 'System.out.println (" die JSON ARRAY ist "+ Kontakte);' ..Das logcat ist displayng Array korrekt..und ich habe habe die obige php-Datei modifiziert, um sie in die Tabelle einzufügen..aber die Daten werden nicht eingefügt..was könnte das Problem sein ..? –

+0

Ich habe einen dummen Fehler in der Insert-Anweisung gemacht .. ich sollte updated_at..now schreiben, es funktioniert perfekt..danke ... –

0

Verwendung Foreah Post Wertekontrollkästchen.

 $vault_no1= $this->input->post("vault_no"); 
     foreach($vault_no1 as $key=>$val){ 
      $arra[] = $val; 
     } 


     $name= $this->input->post("name"); 
     foreach($name as $key=>$val){ 
      $arre[] = $val; 
     } 


     $phone= $this->input->post("phone"); 
     foreach($phone as $key=>$val){ 
      $arrv[] = $val; 
     } 

     $length = count($arra); 
     for ($i = 0; $i < $length; $i++) { 
      echo "vault_no".$arra[$i]." Name:".$arre[$i]." phone:".$arrv[$i]; //Sample print for you 
      //Use your Insert query here with aboe arrays value 
     } 
+0

können Sie etwas mehr erklären ... –

+0

Name und Telefon hat mehrere Werte .. –

+0

Tun Sie dies für benennen und telefonieren und in einem separaten Array speichern. Ich denke, dass alle Arrays die gleiche Array-Länge haben. Also verwenden Sie für() -Schleife, um es mit dem entsprechenden Array-Wert einfügen – Gopalakrishnan

Verwandte Themen