The app is crashing when I try to call getAllSmsFromProvider method (in MainActivity) from another class (Senders.java).
Here's the method:
public ArrayList<ArrayList<String>> getAllSmsFromProvider() {
List<String> lstSenders = new ArrayList<>();
ContentResolver cr = getContentResolver();
ArrayList<ArrayList<String>> messages = new ArrayList<>();
Cursor c = cr.query(Telephony.Sms.CONTENT_URI, // Official CONTENT_URI from docs
new String[]{Telephony.TextBasedSmsColumns.ADDRESS, Telephony.TextBasedSmsColumns.BODY}, // Select body text
null,
null,
Telephony.Sms.DEFAULT_SORT_ORDER); // Default sort order
int totalSMS = c.getCount();
if (c.moveToFirst()) {
for (int i = 0; i < totalSMS; i++) {
String number = c.getString(0);
number = number.substring(number.length()-10,number.length());
if (lstSenders.contains(number)){
c.moveToNext();
} else {
lstSenders.add(number);
ArrayList<String> convo = new ArrayList<>();
convo.add(number);
messages.add(convo);
c.moveToNext();
}
} }else {
throw new RuntimeException("You have no SMS in Inbox");
}
c.moveToFirst();
if (c.moveToFirst()) {
String number = c.getString(0);
number = number.substring(number.length()-10,number.length());
int index = lstSenders.indexOf(number);
messages.get(index).add(c.getString(1));
c.moveToNext();
} else {
}
return messages;
}
Here's the Senders.java class calling this method:
public class Senders {
public String senderNumber;
public String mostRecentSMS;
public Senders(String number, String mostRecentSMS){
this.senderNumber = number;
this.mostRecentSMS = mostRecentSMS;
}
public static ArrayList<Senders> getSender() {
ArrayList<Senders> sender = new ArrayList<>();
MainActivity mainActivity = new MainActivity();
ArrayList<ArrayList<String>> messages = mainActivity.getAllSmsFromProvider();
for (int i = 0; i < messages.size(); i ++){
sender.add(new Senders(messages.get(i).get(0), messages.get(i).get(1)));
}
getallsmsfromprovider returns messages, an arraylist of arraylists. each arraylist within the arraylist of messages contains two important things, the sender's number and the most recent text sent/received (indexed at 0, and 1, respectively). So the for loop within senders is trying to add that to an arraylist that will be used to populate a list adapter.
Here's the error i'm receiving after crash:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ContentResolver android.content.Context.getContentResolver()' on a null object reference
11-07 12:43:29.454 10266-10266/com.jesse.android.textingapp E/AndroidRuntime: at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:97)
11-07 12:43:29.454 10266-10266/com.jesse.android.textingapp E/AndroidRuntime: at com.jesse.android.textingapp.MainActivity.getAllSmsFromProvider(MainActivity.java:84)
11-07 12:43:29.454 10266-10266/com.jesse.android.textingapp E/AndroidRuntime: at com.jesse.android.textingapp.Senders.getSender(Senders.java:22)
11-07 12:43:29.454 10266-10266/com.jesse.android.textingapp E/AndroidRuntime: at com.jesse.android.textingapp.MainActivity.onCreate(MainActivity.java:32)
As you can see, there's something wrong with my instantiation of mainActivity and use of getallsmsfromprovider within senders.java, as when I comment out calling getallsmsfromprovider from Senders.java, the app launches fine.