Как отправить значения на сервер в виде объекта json или массива json - PullRequest
0 голосов
/ 23 мая 2018

На самом деле, я хочу отправить контакты телефона пользователя на сервер в виде json.Где-то я это читал, это можно сделать через библиотеку GSON, но я не могу получить точный код. Номер телефона и имя контакта указаны в виде строки.Я попробовал это сделать, сделав 2 класса.

Один - это основной класс, в котором я выбираю контакты

public class Access_contacts extends AppCompatActivity {


    ArrayList<Contact_Pojo> arrayList;
    private static final int PERMISSION_REQUEST_CONTACT =123 ;
    private static final int PICK_CONTACT =147 ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_access_contacts);
        arrayList= new ArrayList<Contact_Pojo>();

        askForContactPermission();

        Gson gson = new Gson();
        Type type = new TypeToken<List<Contact_Pojo>>() {}.getType();
        String json = gson.toJson(arrayList, type);

        ArrayList<Contact_Pojo> fromJson = gson.fromJson(json, type);

        for (Contact_Pojo task : fromJson) {
            System.out.println(task);
        }



    }

    private void gettingPhoneContacts() {
        ContentResolver cr = getApplicationContext().getContentResolver();
        // Read Contacts
        Cursor c = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,     new String[] { ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME,       ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.RawContacts.ACCOUNT_TYPE },     ContactsContract.RawContacts.ACCOUNT_TYPE + " <> 'google' ",
                null, null);
        if (c.getCount() <= 0) {    Toast.makeText(getApplicationContext(), "No Phone Contact Found..!",
                Toast.LENGTH_SHORT).show();   }
                else {
            while (c.moveToNext()) {
                String Phone_number = c       .getString(c         .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));          //Phone number
            String name = c       .getString(c         .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));


                    arrayList.add(new Contact_Pojo(name,Phone_number));


                Log.d("contactsss",Phone_number+ " "+name);
            //Name of contact
        }
        for(int i=0;i<arrayList.size();i++)
        {
        Log.d("jopo",""+arrayList.get(i));
        }

    }}

    private void askForContactPermission() {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(Access_contacts.this,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {

                // Should we show an explanation?
                if (ActivityCompat.shouldShowRequestPermissionRationale(Access_contacts.this,
                        Manifest.permission.READ_CONTACTS)) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(Access_contacts.this);
                    builder.setTitle("Contacts access needed");
                    builder.setPositiveButton(android.R.string.ok, null);
                    builder.setMessage("please confirm Contacts access");//TODO put real question
                    builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
                        @TargetApi(Build.VERSION_CODES.M)
                        @Override
                        public void onDismiss(DialogInterface dialog) {
                            requestPermissions(
                                    new String[]
                                            {Manifest.permission.READ_CONTACTS}
                                    , PERMISSION_REQUEST_CONTACT);
                        }
                    });
                    builder.show();
                    // Show an expanation to the user *asynchronously* -- don't block
                    // this thread waiting for the user's response! After the user
                    // sees the explanation, try again to request the permission.

                } else {

                    // No explanation needed, we can request the permission.

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

                    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
                    // app-defined int constant. The callback method gets the
                    // result of the request.
                }
            }else{
                getContact();
            }
        }
        else{
            getContact();
        }
    }

    private void getContact() {
        Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
        startActivityForResult(intent, PICK_CONTACT);

    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_CONTACT: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    gettingPhoneContacts();
                    // permission was granted, yay! Do the
                    // contacts-related task you need to do.

                } else {
                    Toast.makeText(this, "No Permission for Contacts", Toast.LENGTH_SHORT).show();
                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                }
                return;
            }

            // other 'case' lines to check for other
            // permissions this app might request
        }
    }
}

Другой - это класс POJO, который выглядит следующим образом:

public class Contact_Pojo {


    @Override
    public String toString() {
        return "Contact_Pojo [name=" + name + ", number=" + number + "  ]";
    }


    public Contact_Pojo(String name, String number) {
        this.name = name;
        this.number = number;

    }

    String name,number;;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }


}

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

я думаю, что вы должны использовать JSONObject и JSONArray, например:

JSONArray array = new JSONArray("Catalo");

        JSONObject contact = new JSONObject();
        contact.put("key", "value");
        contact.put("key", "value");
        ...
        array.put(contact);
0 голосов
/ 23 мая 2018

Вот решение.Вы должны решить, "Что вам нужно?"JSONOject или JSONArray.Объявите сверху.

JSONObject mainObject = new JSONObject();
JSONArray jsonBody;

Теперь внутри OnCreate

              jsonBody = new JSONArray();
                 try {
                    JSONObject object_1 = new JSONObject();
                    object_1.put("KEY_VALUE", KEY_PAIR);
                    object_1.put("KEY_VALUE", KEY_PAIR);
                    object_1.put("KEY_VALUE", KEY_PAIR);
                    object_1.put("KEY_VALUE", KEY_PAIR);
                    object_1.put("KEY_VALUE", KEY_PAIR_id);
                    jsonBody.put(0, object_1);
                    mainObject.put("data", jsonBody);
                  String data = mainObject.toString();
                } catch (Exception e) {
                    e.printStackTrace();
                }

Добавьте ваши ключи вместо KEY_VALUE и их значения в KEY_PAIR.

Если вам нужно отправить JSONArrayпередайте jsonBody, а при необходимости JSONObject используйте mainObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...