How to fix StrictMode policy violation in android while fetching all mobile number?

11,373

You should not perform the work on the UI thread, but instead create a worker thread and do most of the work there. The simplest solution is to use an AsyncTask:

public class StrictModeActivity extends AppCompatActivity {

    private static final String TAG = StrictModeActivity.class.getSimpleName();

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

        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectDiskReads()
                .detectDiskWrites()
                .detectNetwork()
                .penaltyLog()
                .penaltyDeath()
                .build());

        new QueryForPhoneNumberTask().execute("your contact display name");
    }

    private class QueryForPhoneNumberTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... strings) {
            String mFmFmUserMobile = null;
            String contactId = strings[0];

            final String[] projection = new String[]{
                    ContactsContract.CommonDataKinds.Phone.NUMBER,
                    ContactsContract.CommonDataKinds.Phone.TYPE,
            };

            final Cursor phone = getContentResolver().query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    projection,
                    ContactsContract.Data.DISPLAY_NAME + "=?",
                    new String[]{contactId},
                    null);

            if (phone.moveToFirst()) {
                final int contactNumberColumnIndex = phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                //final int contactTypeColumnIndex = phone.getColumnIndex(Phone.TYPE);

                while (!phone.isAfterLast()) {
                    mFmFmUserMobile = phone.getString(contactNumberColumnIndex);
                    //final int type = phone.getInt(contactTypeColumnIndex);
                    phone.moveToNext();
                }
            }
            phone.close();

            if (mFmFmUserMobile != null && mFmFmUserMobile.contains(" ")) {
                mFmFmUserMobile.replace(" ", "");
            }
            //mFmFmUserMobile.substring(mFmFmUserMobile.length()-10,mFmFmUserMobile.length()

            return mFmFmUserMobile;
        }

        @Override
        protected void onPostExecute(String result) {
            Log.d(TAG, result);
        }
    }
}
Share:
11,373
Vin
Author by

Vin

Updated on June 14, 2022

Comments

  • Vin
    Vin almost 2 years

    I am fetching all mobile numbers using cursor query. I have enabled strict mode getting this exception.

    Here is my code for fetching mobile number :

    public String queryForPhoneNumber(String contactId) {
        final String[] projection = new String[] {
                Phone.NUMBER,
                Phone.TYPE,
        };
    
        final Cursor phone = getActivity().getContentResolver().query(
                Phone.CONTENT_URI,  
                projection,
                Data.DISPLAY_NAME + "=?",
                new String[]{contactId},
                null);
    
        if(phone.moveToFirst()) {
            final int contactNumberColumnIndex = phone.getColumnIndex(Phone.NUMBER);
            //final int contactTypeColumnIndex = phone.getColumnIndex(Phone.TYPE);
    
            while(!phone.isAfterLast()) {
                mFmFmUserMobile = phone.getString(contactNumberColumnIndex);
                //final int type = phone.getInt(contactTypeColumnIndex);
                phone.moveToNext();
            }
    
        }
        phone.close();
    
        if(mFmFmUserMobile.contains(" ")){
            mFmFmUserMobile.replace(" ", "");
        }
        //mFmFmUserMobile.substring(mFmFmUserMobile.length()-10,mFmFmUserMobile.length()
    
        return mFmFmUserMobile;
    }
    

    Exception :

    04-25 09:51:15.035: D/StrictMode(27661): StrictMode policy violation; ~duration=31 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=2335 violation=2
    04-25 09:51:15.035: D/StrictMode(27661):    at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1135)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.database.sqlite.SQLiteConnection.applyBlockGuardPolicy(SQLiteConnection.java:1041)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.database.sqlite.SQLiteConnection.executeForCursorWindow(SQLiteConnection.java:842)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:836)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:144)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.database.CursorToBulkCursorAdaptor.getBulkCursorDescriptor(CursorToBulkCursorAdaptor.java:148)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:118)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.os.Binder.execTransact(Binder.java:404)
    04-25 09:51:15.035: D/StrictMode(27661):    at dalvik.system.NativeStart.run(Native Method)
    04-25 09:51:15.035: D/StrictMode(27661): # via Binder call with stack:
    04-25 09:51:15.035: D/StrictMode(27661): android.os.StrictMode$LogStackTrace
    04-25 09:51:15.035: D/StrictMode(27661):    at android.os.StrictMode.readAndHandleBinderCallViolations(StrictMode.java:1705)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.os.Parcel.readExceptionCode(Parcel.java:1447)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:134)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.content.ContentProviderProxy.query(ContentProviderNative.java:413)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.content.ContentResolver.query(ContentResolver.java:461)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.content.ContentResolver.query(ContentResolver.java:404)
    04-25 09:51:15.035: D/StrictMode(27661):    at com.newtglobal.fmfm.InviteFriendFragement.queryForPhoneNumber(InviteFriendFragement.java:954)
    04-25 09:51:15.035: D/StrictMode(27661):    at com.newtglobal.fmfm.InviteFriendFragement$ContactsAdapter.bindView(InviteFriendFragement.java:747)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.support.v4.widget.CursorAdapter.getView(CursorAdapter.java:256)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.widget.AbsListView.obtainView(AbsListView.java:2255)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.widget.ListView.makeAndAddView(ListView.java:1790)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.widget.ListView.fillDown(ListView.java:691)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.widget.ListView.fillGap(ListView.java:655)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5143)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3243)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.widget.AbsListView.onTouchMove(AbsListView.java:3587)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.widget.AbsListView.onTouchEvent(AbsListView.java:3431)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.View.dispatchTouchEvent(View.java:7736)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2212)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    04-25 09:51:15.035: D/StrictMode(27661):    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068)
    04-25 09:51:15.035: D/StrictMode(27661):    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.app.Activity.dispatchTouchEvent(Activity.java:2466)
    04-25 09:51:15.035: D/StrictMode(27661):    at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.dispatchTouchEvent(ActionBarActivityDelegateICS.java:268)
    04-25 09:51:15.035: D/StrictMode(27661):    at c
    

    Any help would be helpful for me. Thanks in advance.