public class MainActivity extends AppCompatActivity {

    Button button;
    TextView textView;
    String TAG = MainActivity.class.getName();//LOG TAG

    ArrayList<String> contactName = new ArrayList<String>();
    ArrayList<String> contactID=new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.button);
        textView = (TextView) findViewById(R.id.textView);

        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                final Cursor kontakteList =
                        getContentResolver().query(//ContentResolver
                        ContactsContract.Contacts.CONTENT_URI,//URI
                        new String[]{//Select
                                ContactsContract.PhoneLookup._ID,
                                ContactsContract.PhoneLookup.DISPLAY_NAME},
                        null,//WHERE
                        null,//WHERE ARGS
                        null//ORDER
                );//query

                if(kontakteList.moveToFirst()) {//if Cursor not null

                    String[] columnNames = kontakteList.getColumnNames();//getColumnNames
                    Log.d(TAG, "column Names size: "+columnNames.length);
                    StringBuilder stringBuilder=new StringBuilder();

                    for (int i=0;i<columnNames.length;i++) {//Print Column Names
                        Log.d(TAG, columnNames[i].toString() + " i= " + i);


                        stringBuilder.append(columnNames[i].toString() + " ");
                        Log.d(TAG, stringBuilder.toString() + " sb i= " + i);

                    }//columnNames

                    stringBuilder.append(System.getProperty("line.separator"));

                    kontakteList.moveToFirst();

                    while(kontakteList.isAfterLast()==false) {//for each row, until after last row is reached
                        for (int i = 0; i < columnNames.length; i++) {//for each column
                            Log.d(TAG, " i: " + i + " " +kontakteList.getString(kontakteList.getColumnIndex(columnNames[i])));
                            stringBuilder.append(kontakteList.getString(kontakteList.getColumnIndex(columnNames[i])));
                        }//for
                        contactID.add(kontakteList.getString(kontakteList.getColumnIndex(columnNames[0])));
                        contactName.add(kontakteList.getString(kontakteList.getColumnIndex(columnNames[1])));

                        stringBuilder.append(System.getProperty("line.separator"));//generate a new line
                        kontakteList.moveToNext();//move to next row
                    }//while
                    Log.d(TAG, stringBuilder.toString());

                    textView.setText(stringBuilder.toString());//Display Data to Text View

                }//if
            }//onClick Method
        });//setOnClickListener
    }//onCreate

}//MainActivity