gpt4 book ai didi

java - 使用 ContentResolver 检索 SMS 的 NullPointerException 导致应用程序崩溃

转载 作者:行者123 更新时间:2023-11-30 01:46:58 24 4
gpt4 key购买 nike

当我尝试从另一个类 (Senders.java) 调用 getAllSmsFromProvider 方法(在 MainActivity 中)时,应用程序崩溃了。

方法如下:

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;
}

这是调用此方法的 Senders.java 类:

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 返回消息,一个数组列表的数组列表。消息数组列表中的每个数组列表包含两个重要的内容,发件人的号码和最近发送/接收的文本(索引分别为 0 和 1)。因此 senders 中的 for 循环试图将其添加到将用于填充列表适配器的数组列表中。

这是我在崩溃后收到的错误:

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)

如您所见,我在 senders.java 中对 mainActivity 的实例化和 getallsmsfromprovider 的使用存在一些问题,因为当我注释掉从 Senders.java 调用 getallsmsfromprovider 时,应用程序启动正常。

最佳答案

永远不要自己创建 Activity 实例。您的 MainActivity 实例没有被系统正确初始化,不能用于很多事情。

getSender() 中删除 MainActivity mainActivity = new MainActivity();。让 getAllSmsFromProvider()Context 作为参数,这样您就可以在该 Context 上调用 getContentResolver()。或者,让 getAllSmsFromProvider()ContentResolver 作为参数。

关于java - 使用 ContentResolver 检索 SMS 的 NullPointerException 导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33587655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com