-1
package com.example.smsread;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.lang.reflect.Array;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    ListView listView;

    private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100;
    ArrayList<String> smsList;
    //private static final String TAG == MainActivity.class.getSimpleName()


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

        listView = (ListView) findViewById(R.id.idList);

        int permissionCheck = ContextCompat.checkSelfPermission( this,
                Manifest.permission.READ_SMS);

        if(permissionCheck == PackageManager.PERMISSION_GRANTED) {
            showContacts();
        } else {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_SMS},
                    PERMISSIONS_REQUEST_READ_CONTACTS);
        }
        }
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResult){
        if(requestCode == PERMISSIONS_REQUEST_READ_CONTACTS){
            if(grantResult[0] == PackageManager.PERMISSION_GRANTED) {
                showContacts();
            }else {
                Toast.makeText(this,
                        "Until you grant the permission, we cannot display the names",
                        Toast.LENGTH_SHORT).show();
            }
        }

}

    private void showContacts(){
        Uri inboxUri = Uri.parse("content://sms/inbox");
        smsList = new ArrayList<>();
        ContentResolver contentResolver = getContentResolver();

        Cursor cursor = contentResolver.query(inboxUri, null, null, null, null);
        while (cursor.moveToNext()){
            String number = cursor.getString(cursor.getColumnIndexOrThrow("address")).toString();
            String body = cursor.getString(cursor.getColumnIndexOrThrow("body")).toString();

            //String number = "098765432";
            //String body = "lat: 33.584317N long: 73.045458";
            String data = body;
            String[] args = data.split(" ");
            //           String a = body.trim();
//            String latitude = args[1];
//            String longitude = args[1];
           // Log.d("Args",a);
            Log.d("Args",args[1]);
            Log.d("Args",args[3]);







            smsList.add("Number:" + number + "\n" + "Body:" + body + "\n"+"latitude:" +args[1]+ "\n" + "longitude:" +args[3] );
                    //+ "\n" + "latitude:" +args[1]+ "\n" + "longitude:" +args[3]

        }
        cursor.close();
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,
                smsList);

        listView.setAdapter(adapter);
    }

}

error: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.smsread, PID: 28273 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.smsread/com.example.smsread.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3430) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199) at android.os.Handler.dispatchMessage(Handler.java:112) at android.os.Looper.loop(Looper.java:216) at android.app.ActivityThread.main(ActivityThread.java:7625) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987) Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 at com.example.smsread.MainActivity.showContacts(MainActivity.java:83) at com.example.smsread.MainActivity.onCreate(MainActivity.java:44) at android.app.Activity.performCreate(Activity.java:7458) at android.app.Activity.performCreate(Activity.java:7448) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1286) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3409) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199)  at android.os.Handler.dispatchMessage(Handler.java:112)  at android.os.Looper.loop(Looper.java:216)  at android.app.ActivityThread.main(ActivityThread.java:7625)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)  I/Process: Sending signal. PID: 28273 SIG: 9 Process 28273 terminated.


Why am I getting this error?

Max Vollmer
  • 8,412
  • 9
  • 28
  • 43
webdown
  • 11
  • 2
  • 2
    The stacktrace points out pretty clearly what you're doing wrong: `args` only contains 1 element, but you're assuming that it contains more than that. – Michael Dec 06 '19 at 12:38
  • 2
    Duplicate of [What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?](https://stackoverflow.com/questions/5554734/what-causes-a-java-lang-arrayindexoutofboundsexception-and-how-do-i-prevent-it) – Max Vollmer Dec 06 '19 at 13:03

1 Answers1

1

Because of ArrayIndexOutOfBoundsException. When you're splitting data to args[] and trying to log args[1] and args[3] make sure it has enough elements. Better to use more safety constructions like:

for(String s : args){
    Log.d("Args", s);
}
takendarkk
  • 3,347
  • 8
  • 25
  • 37
Isen
  • 115
  • 1
  • 7