1

現在、Androidの連絡先を使用しています。これをjson配列に変換して、この連絡先をWebサーバーに投稿したいのですが、すべての連絡先を取得できますが、json配列を印刷すると、最後の連絡先のみが表示されるという問題があります。オブジェクトの値が保持されません。この問題を解決するにはどうすればよいですか?以下にコードを投稿するだけです。

        JSONArray jsnConts=new JSONArray();
        JSONObject jsnMain= new JSONObject();
        ContentResolver cr =getContentResolver();
        Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        lengthh=cursor.getCount();

        JSONObject a[]=new JSONObject[lengthh];
        ArrayList<String>cnt2=new ArrayList<String>();
        contactarray=new String[lengthh][avalues.length];

        System.out.println(cursor.getCount());

        JSONObject jsnName=new JSONObject ();
        int kk=0;
        while (cursor.moveToNext()) 
        {

        ArrayList<String>cnt1=new ArrayList<String>();
            displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));       
            id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

            mail(id);
            Ph_num(id);

               for (int i=0; i<4; i++) 
            { 
                if(i==0)
                {
                    cnt1.add("Name ="+displayName);
                    jsnName.put("Name", displayName);
                }
                if(i==1)
                {
                    cnt1.add("id ="+id);
                    jsnName.put("id", id);
                }
                if(i==2)
                {
                    cnt1.add("email ="+email_data);
                    jsnName.put("email", EMAIL);
                    jsnName.put("email1", EMAIL1);
                    jsnName.put("email2", EMAIL2);
                }
                if(i==3)
                {
                    cnt1.add("PHONE_NUM_DATA ="+PHONE_NUM_DATA);
                    jsnName.put("ph1", PH_NUM);
                    jsnName.put("ph2", PH_NUM1);
                    jsnName.put("ph3", PH_NUM2);
                    jsnName.put("ph4", PH_NUM3);

                }
// jsnConts.put(jsnName);
//jsnConts.put(kk, jsnName);

            }
            cnt2.addAll(cnt1);

//   System.out.println("test"+jsnName);
            jsnConts.put(jsnName);
//   jsnConts.put(kk, jsnName);
            kk++;

        }
        System.out.println("test"+jsnName);
        System.out.println("testjsn"+jsnConts);
// System.out.println("------"+a);
4

1 に答える 1

2

JSONArrayを出力するのではなく、JSONObjectである変数jsnNameを出力します。これは単一の値です。そして、あなたはループを通して毎回それを上書きしています。ループを通過するたびに新しいJSONObjectを作成し、完成した各JSONObjectをJSONArrayに追加して、それを印刷する必要があります。

于 2013-03-15T14:27:34.297 に答える