将联系人上载到服务器时出现空指针异常 [英] Null pointer exception while uploading contacts to server

查看:90
本文介绍了将联系人上载到服务器时出现空指针异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在这里,我正在从手机中获取姓名,电子邮件,电话号码,并尝试将其上传到服务器..如果联系人包含姓名,电子邮件和电话号码,则值将成功插入..但如果有任何字段如果为空,则抛出NULL指针异常.如何避免这种情况..我的意思是,如果联系人不包含电子邮件,则应至少发送姓名和电话号码.

Here i am fetching the name,email,phone number from the mobile and trying to upload to server..Here if the contacts contains name,email and phone number the values will be inserted successfully..but if any of the field is empty it is throwing NULL pointer exception.How to avoid this one..i mean if the contact does not contain email it should atleast send name and phone number.

这是我的代码.

public class DisplayContact1 extends Activity {

    private static String TAG = WorkDetails1.class.getSimpleName();

    Button select;

    private String vault;
    List<AddressBookContact> list;

    public static final String kvault = "vault_no";
    public static final String kname = "name";
    public static final String kphone = "phone";
    public static final String kemail = "email";
    public static final String kcontacts = "contacts";

    public static final String SHARED_PREF_NAME = "myloginapp";

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

    private static final int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 1;

    Cursor cursor;
    LongSparseArray<AddressBookContact> array;
    long start;

    @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());

    }

    public  void getAllContacts(ContentResolver cr) {

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

            //fetches contacts from the phone contact list and displays in ascending order
            list = new LinkedList<AddressBookContact>();
            array = new LongSparseArray<AddressBookContact>();
            start = System.currentTimeMillis();

            String[] projection = {
                    ContactsContract.Data.MIMETYPE,
                    ContactsContract.Data.CONTACT_ID,
                    ContactsContract.Contacts.DISPLAY_NAME,
                    ContactsContract.CommonDataKinds.Contactables.DATA,
                    ContactsContract.CommonDataKinds.Contactables.TYPE,
            };
            String selection = ContactsContract.Data.MIMETYPE + " in (?, ?)";
            String[] selectionArgs = {
                    ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE,
                    ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
            };
            String sortOrder = ContactsContract.Contacts.SORT_KEY_ALTERNATIVE;

            Uri uri = ContactsContract.Data.CONTENT_URI;
// we could also use Uri uri = ContactsContract.Data.CONTENT_URI;

            cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
            contactsdisplay();

        } else {

            requestForLocationPermission();
        }
    }

    private void requestForLocationPermission()
    {

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

            ActivityCompat.requestPermissions(DisplayContact1.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(DisplayContact1.this.getContentResolver());
                    contactsdisplay();
                }
                break;
        }
    }

    public  void contactsdisplay() {

        //Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
        final int mimeTypeIdx = cursor.getColumnIndex(ContactsContract.Data.MIMETYPE);
        final int idIdx = cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID);
        final int nameIdx = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
        final int dataIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.DATA);
        final int typeIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.TYPE);

        while (cursor.moveToNext()) {
            long id = cursor.getLong(idIdx);
            AddressBookContact addressBookContact = array.get(id);
            if (addressBookContact == null) {
                addressBookContact = new AddressBookContact(id, cursor.getString(nameIdx), getResources());
                array.put(id, addressBookContact);
                list.add(addressBookContact);
            }
            int type = cursor.getInt(typeIdx);
            String data = cursor.getString(dataIdx);
            String mimeType = cursor.getString(mimeTypeIdx);
            if (mimeType.equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)) {
                // mimeType == ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE
                addressBookContact.addEmail(type, data);
            } else {
                // mimeType == ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
                addressBookContact.addPhone(type, data);
            }
        }
        long ms = System.currentTimeMillis() - start;
        cursor.close();

// done!!! show the results...
        int i = 1;
        for (AddressBookContact addressBookContact : list) {
            Log.d(TAG, "AddressBookContact #" + i++ + ": " + addressBookContact.toString(true));
        }
        final String cOn = "<b><font color='#ff9900'>";
        final String cOff = "</font></b>";
        Spanned l1 = Html.fromHtml("got " + cOn + array.size() + cOff + " contacts<br/>");
        Spanned l2 = Html.fromHtml("query took " + cOn + ms / 1000f + cOff + " s (" + cOn + ms + cOff + " ms)");

        Log.d(TAG, "\n\n╔══════ query execution stats ═══════" );
        Log.d(TAG, "║    " + l1);
        Log.d(TAG, "║    " + l2);
        Log.d(TAG, "╚════════════════════════════════════" );
        SpannableStringBuilder msg = new SpannableStringBuilder().append(l1).append(l2);

        ListView lv= (ListView) findViewById(R.id.lv);
        lv.setAdapter(new ArrayAdapter<AddressBookContact>(this, android.R.layout.simple_list_item_1, list));
        lv.setItemsCanFocus(false);
        lv.setTextFilterEnabled(true);

        select = (Button) findViewById(R.id.button1);
        select.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v){
                uploadImage();
            }

        });
    }

    public void uploadImage(){

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

        final String vault_no = vault;

        class UploadImage extends AsyncTask<Void,Void,String> {
            ProgressDialog loading;
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                loading = ProgressDialog.show(DisplayContact1.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(DisplayContact1.this, s, Toast.LENGTH_SHORT).show();
                    // startActivity(intent);
                }else{
                    Toast.makeText(DisplayContact1.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>();

                JSONArray contacts = new JSONArray();
                int i = 1;
                for (AddressBookContact addressBookContact : list) {
                    try {
                        Log.d(TAG, "AddressBookContact #" + i++ + ": " + addressBookContact.toString(true));
                        JSONObject contact = new JSONObject();

                        contact.put(kname, addressBookContact.name.toString());
                        contact.put(kvault, vault_no);
                        contact.put(kphone, addressBookContact.phone.toString());

                        if(addressBookContact.email.toString()!=null)
                           contact.put(kemail, addressBookContact.email.toString());

                        contacts.put(contact);
                    }
                    catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    param.put(kcontacts, contacts.toString());
                    System.out.println("param value.." + i++ +":"+ contacts.toString());
                }
                return rh.sendPostRequest(UPLOAD_URL, param);

            }
        }
        UploadImage u = new UploadImage();
        u.execute();
    }
}

这是 AddressBookContact.class

public class AddressBookContact {

    private long id;
    private Resources res;
    String name;
    LongSparseArray<String> email;
    LongSparseArray<String> phone;

    AddressBookContact(long id, String name, Resources res) {
        this.id = id;
        this.name = name;
        this.res = res;
    }

    @Override
    public String toString() {
        return toString(false);
    }

    public String toString(boolean rich) {
        SpannableStringBuilder builder = new SpannableStringBuilder();
        if (rich) {
            builder.append("id: ").append(Long.toString(id))

                    .append(", name: ").append(name);
        } else {
            builder.append("name: ").append(name);
        }

        if (phone != null) {
            builder.append("\nphone: ");
            for (int i = 0; i < phone.size(); i++) {
                int type = (int) phone.keyAt(i);

                builder.append(phone.valueAt(i));
                if (i + 1 < phone.size()) {
                    builder.append(", ");
                }
            }
        }

        if (email != null) {
            builder.append("\nemail: ");
            for (int i = 0; i < email.size(); i++) {
                int type = (int) email.keyAt(i);

                builder.append(email.valueAt(i));
                if (i + 1 < email.size()) {
                    builder.append(", ");
                }
            }
        }
        return builder.toString();
    }

    public void addEmail(int type, String address) {
        if (email == null) {
            email = new LongSparseArray<String>();
        }
        email.put(type, address);
    }

    public void addPhone(int type, String number) {
        if (phone == null) {
            phone = new LongSparseArray<String>();
        }
        phone.put(type, number);
    }
}

如果电子邮件字段为空,则此行出现空指针异常. contact.put(kemail, addressBookContact.email.toString()); .. so,所以我添加了if循环来检查空条件..但随后我也遇到了异常.

if email field is empty, i am getting null pointer exception at this line.. contact.put(kemail, addressBookContact.email.toString());..so i have added if loop to check the null condition..but then also i am getting exception.

推荐答案

此处

if (addressBookContact.email.toString() != null)

您尝试从null的'email'变量获取String. 正确的比较是:

you try to get String from 'email' variable that is null. Correct comparing is:

if (addressBookContact.email != null)

这篇关于将联系人上载到服务器时出现空指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆