2017-04-19 10 views
0

私の電話のすべての電話番号をJSONに変換して1つのポストでmysql dbにアップロードしようとしています。私は、今のAndroidの側面に焦点を当てています - PHPは後になります。あなたはlogcatでそれらのすべてを見ることができますbuttonCheckボタンをクリックすると、すべての後、私はまだ私alContacts配列によって認識されていないメソッドsizelengthを読んだ -ArraylistをJSONに変換してMySQLに投稿するにはどうすればよいですか?

だから、私はすべての数字の配列リストを作ります。私はそれがJSON(?)に変換するために取るべきだと考えています。ここに私のコードは次のとおりです。

public class MainActivity extends AppCompatActivity { 

    // this is the php file name where to select from the database, the user's phone number 
    private static final String CHECKPHONENUMBER_URL = "http://www.example.com/myfile.php"; 

    //we are posting phoneNo, which in PHP is phonenumber 
    public static final String KEY_PHONENUMBER = "phonenumber"; 

    //alContacts is a list of all the phone numbers 
    public static final ArrayList<String> alContacts = new ArrayList<String>(); 

    Button buttonCheck; 

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

     buttonCheck = (Button) findViewById(R.id.buttonCheck); 

     //get the names and phone numbers of all contacts in phone book 
     ContentResolver cr = getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, 
       null, null, null, null); 

     if (cur.getCount() > 0) { 
      while (cur.moveToNext()) { 


       String id = cur.getString(
         cur.getColumnIndex(ContactsContract.Contacts._ID)); 

       if (cur.getInt(cur.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 phoneNo = pCur.getString(pCur.getColumnIndex(
           ContactsContract.CommonDataKinds.Phone.NUMBER)); 

         alContacts.add(phoneNo); 
         // break; 
        } 
        pCur.close(); 

       } 
      } 
     } 

     buttonCheck.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       System.out.println("Print the contacts array : "); 
       System.out.println(alContacts); 

       CheckifUserisContact(); 
      } 
     }); 

    } 


// send the numbers in one POST to the mySql db with Volley 

    private void CheckifUserisContact() { 

     StringRequest stringRequest = new StringRequest(Request.Method.POST, CHECKPHONENUMBER_URL, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         if (response.equals("failure")) { 
          Toast.makeText(MainActivity.this, "failed", Toast.LENGTH_LONG).show(); 
         } else { 
          Toast.makeText(MainActivity.this, "succeeded", Toast.LENGTH_LONG).show(); 
         } 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_LONG).show(); 

        } 

       }) { 

      //********* HAVING TROUBLE HERE ******************* 

      // JSONObject jsonObject=new JSONObject(); 
      JSONArray jsonArray = new JSONArray(); 
      // jsonObject.put("alContacts",jsonArray); 
      //for(int i=0;i<=alContacts.size;i++){} 

      //***************************************************** 

      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put(KEY_PHONENUMBER, jsonArray.toString()); 
       return params; 

      } 

     }; 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(stringRequest); 


    } 
} 

答えて

1

はこれを試してみてください:

//********* HAVING TROUBLE HERE ******************* 

try { 
     JSONObject dataToSend = new JSONObject(); 

     // contacts 
     JSONArray jsonArrayContacts = new JSONArray(); 

     for (int i = 0; i < alContacts.size(); i++) 
     { 
      // contact 
      JSONObject jsonObjectContact = new JSONObject(); 
      jsonObjectContact.put("phone_number", alContacts.get(i)); 

      // Add contact jsonObject to contacts jsonArray 
      jsonArrayContacts.put(jsonObjectContact); 
     } 

     // Add contacts jsonArray to jsonObject 
     dataToSend.put("contacts", jsonArrayContacts); 

     Log.d("JSON", "JSON: " + dataToSend.toString()); 

    } catch (final JSONException e) { 
     Log.e("FAILED", "Json parsing error: " + e.getMessage()); 
    } 

//***************************************************** 

ここで出力JSON形式です:

{ 
     "contacts":[ 
     { 
      "phone_number":"019114-123456" 
     }, 
     { 
      "phone_number":"016174-123456" 
     }, 
     { 
      "phone_number":"012104-123456" 
     }] 
    } 

希望、これは実際には〜

+0

を助ける私はあなたのコードブロックが私の 'public void onR Response.ErrorListenerではなく、「応答」の部分です。今、素晴らしい作品、ありがとう! – CHarris

+1

私の喜び:)....ベストプラクティスは、文字列/ JSONObjectリクエストを作成する前にJSONをビルドすることです。あなたのonResponseでは、あなたのconatct JSONデータがサーバーに送信された場合、サーバーからの応答JSONを取得します。 – FAT

関連する問題