私はアンドロイドの携帯電話から連絡先を取得しています。そして、配列としてPHPにデータを送信し、結果をループして代わりに最後の連絡先を見つけます。どのように私は全体の配列を投稿することができます上の任意の提案。ここでAndroidはPHPのフル配列を投稿します
は私の現在のコード
public class MainActivity extends AppCompatActivity {
ArrayList alContacts;
ArrayList alNumbers;
Button button;
EditText Name,Email;
Map<String,String> param;
ListView lv;
Cursor cr;
String URL ="http://192.168.0.10/oap/home/synchcontacts";
AlertDialog.Builder builder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.save);
Name= (EditText) findViewById(R.id.name);
Email = (EditText) findViewById(R.id.email);
builder = new AlertDialog.Builder(this);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// getDetails();
final String name,email;
name = Name.getText().toString();
email = Email.getText().toString();
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
builder.setTitle("Server Title");
builder.setMessage(response);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog bu = builder.create();
bu.show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, "Error",Toast.LENGTH_SHORT).show();
error.printStackTrace();
}
}){
@Override
protected Map<String,String> getParams() throws AuthFailureError {
ContentResolver cr = getContentResolver(); //Activity/Application android.content.Context
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if(cursor.moveToFirst())
{
alContacts = new ArrayList<String>();
alNumbers = new ArrayList<String>();
do
{
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{ id }, null);
while (pCur.moveToNext())
{
String contactNumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
alContacts.add(name);
alNumbers.add(contactNumber);
break;
}
pCur.close();
}
} while (cursor.moveToNext()) ;
List<NameValuePair> param = new ArrayList<NameValuePair>();
Gson gson = new GsonBuilder().create();
JsonArray myContacts = gson.toJsonTree(alContacts).getAsJsonArray();
JsonArray myNumbers = gson.toJsonTree(alNumbers).getAsJsonArray();
for (int i=0; i<myContacts.size();i++){
param.add(new BasicNameValuePair("name[]",myContacts.get(i).toString()));
param.add(new BasicNameValuePair("phone[]",myNumbers.get(i).toString()));
}
Log.i("PARAM",param.toString());
}
return param;
}
};
MySingleton.getInstance(MainActivity.this).addToRequestQueue(stringRequest);
}
});
}
}
あなたの問題はあなたが値を渡すためにHashMapを使用していることであるPHP
function SynchContacts() {
$phone = $this->input->post('phone');
$name = $this->input->post('name');
for ($i = 0; $i < count($phone); $i++) {
$data = array(
'name' => $name[$i],
'phone' => $phone[$i]
);
$this->saveData('phonebook', $data);
}
}
@Valdimir iはリストにハッシュマップを置き換えますどのようにあなたの提案を使用して、共有をありがとうサーバーに送信される最終出力を返します – Alphy
@Alphy私はあなたのコードスニペットのように見えるように私の例を更新しました。後でparamを使用するコードを変更する方法は、共有スナップセットの一部ではないので、私は言うことができません。 –
@Valdimirスナップショットを完全なコードに更新しました。ログから、配列を作成しているのが分かりますが、戻り値は現在、Listを使用しています保護されたマップを変更する getParams()はAuthFailureErrorをスローします{更新を参照していますか? –
Alphy