Java 当我收到短信时,我的活动将关闭
当我收到短信时,我的当前活动关闭了,但不知道为什么,我只是用adapter.notifyDataSetChanged刷新我的listview。当我发送消息时,我可以刷新它,它只起作用,但在我收到消息时不起作用 这是我的广播接收器Java 当我收到短信时,我的活动将关闭,java,android-studio,Java,Android Studio,当我收到短信时,我的当前活动关闭了,但不知道为什么,我只是用adapter.notifyDataSetChanged刷新我的listview。当我发送消息时,我可以刷新它,它只起作用,但在我收到消息时不起作用 这是我的广播接收器 public class SMSReceiver extends BroadcastReceiver { String from; String msg; long time; PrintMessage pm = new Pri
public class SMSReceiver extends BroadcastReceiver {
String from;
String msg;
long time;
PrintMessage pm = new PrintMessage();
@Override
public void onReceive(Context context, Intent intent) {
abortBroadcast();
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
// Convertir les PDUs en messages
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
// Enfin, traiter les messages
for (SmsMessage message : messages) {
from = message.getOriginatingAddress();
msg = message.getMessageBody();
time = message.getTimestampMillis();
}
}
pm.printMessage();
}
}
公共类SMSReceiver扩展了BroadcastReceiver{
串从;
串味精;
长时间;
PrintMessage pm=新的PrintMessage();
@凌驾
公共void onReceive(上下文、意图){
abortBroadcast();
Bundle=intent.getExtras();
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
SmsMessage[]messages=新SmsMessage[pdus.length];
对于(int i=0;i
然后我的代码显示消息的位置
public class PrintMessage extends AppCompatActivity implements Telephony.TextBasedSmsColumns {
String idPerso, numero, contact, msg, from;
long time;
Intent intent;
ArrayList<CreateMessageAdapter> list = new ArrayList<>();
ImageButton buttonSend;
EditText textSMS;
Toolbar toolbar;
MessageAdapter adapter;
String[] selection;
Cursor cursor;
TextView tv_toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_print_message);
toolbar = (Toolbar) findViewById(R.id.tool_bar_messa);
buttonSend = (ImageButton) findViewById(R.id.btnSend);
textSMS = (EditText) findViewById(R.id.Et_message);
tv_toolbar = (TextView) findViewById(R.id.tv_toolbar);
intent = getIntent();
idPerso = intent.getStringExtra("id");
numero = intent.getStringExtra("numero");
contact = intent.getStringExtra("contact");
selection = new String[]{
Telephony.Sms.THREAD_ID,
Telephony.Sms.BODY,
Telephony.Sms.TYPE,
Telephony.Sms.DATE,
Telephony.Sms.DATE_SENT,
};
printMessage();
setSupportActionBar(toolbar);
if (!contact.equals("no"))
tv_toolbar.setText(contact);
else
tv_toolbar.setText(numero);
tv_toolbar.setMaxWidth(550);
getSupportActionBar().setDisplayShowTitleEnabled(false); //enlever le titre originel
buttonSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String sms = textSMS.getText().toString();
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(numero, null, sms, null, null);
long time = System.currentTimeMillis();
// Cursor cTmp = cr.query(uri, selection, Telephony.Sms.THREAD_ID + "='" + idPerso + "'", null, "date ASC");
// cTmp.moveToFirst();
// int typeTmp = cTmp.getInt(2);
list.add(new CreateMessageAdapter(2, sms, time));
textSMS.setText("");
adapter.notifyDataSetChanged();
Toast.makeText(getApplicationContext(), "SMS Sent!",
Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "SMS faild, please try again later!", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
});
}
public void printMessage() {
// Read stored sms
Uri uri = Telephony.Sms.CONTENT_URI;
ContentResolver cr = getContentResolver();
cursor = cr.query(uri, selection, Telephony.Sms.THREAD_ID + "='" + idPerso + "'", null, "date ASC");
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
int type = cursor.getInt(2);
String body = cursor.getString(1);
long dateNumber = cursor.getLong(3);
long dateNumberSent = cursor.getLong(4);
if (type == 2)
list.add(new CreateMessageAdapter(type, body, dateNumber));
else if (type == 1 || type == 5 || type == 6)
list.add(new CreateMessageAdapter(type, body, dateNumberSent));
cursor.moveToNext();
}
adapter = new MessageAdapter(list, this);
ListView lv = (ListView) findViewById(R.id.lv_message);
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
lv.setStackFromBottom(true);
lv.setAdapter(adapter);
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) {
Toast.makeText(PrintMessage.this, "long clicked pos: " + pos, Toast.LENGTH_LONG).show();
return true;
}
});
}
public void onCreateContextMenu(final ContextMenu menu, final View v, final ContextMenu.ContextMenuInfo menuInfo) {
}
}
public类PrintMessage扩展AppCompatActivity实现Telephony.textbasedmscscolumns{
字符串idPerso、numero、contact、msg、from;
长时间;
意图;
ArrayList=新建ArrayList();
图像按钮发送;
编辑文本短信;
工具栏;
消息适配器;
字符串[]选择;
光标;
文本视图tv_工具栏;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u print\u message);
工具栏=(工具栏)findViewById(R.id.tool\u bar\u messa);
buttonSend=(ImageButton)findViewById(R.id.btnSend);
textSMS=(EditText)findViewById(R.id.Et_消息);
tv_工具栏=(TextView)findViewById(R.id.tv_工具栏);
intent=getIntent();
idPerso=intent.getStringExtra(“id”);
numero=intent.getStringExtra(“numero”);
contact=intent.getStringExtra(“contact”);
选择=新字符串[]{
Telephony.Sms.THREAD_ID,
Telephony.Sms.BODY,
Telephony.Sms.TYPE,
Telephony.Sms.DATE,
Telephony.Sms.DATE_发送,
};
printMessage();
设置支持操作栏(工具栏);
如果(!contact.equals(“no”))
tv_toolbar.setText(联系人);
其他的
tv_toolbar.setText(数字);
tv_工具栏。设置最大宽度(550);
getSupportActionBar().setDisplayShowTitleEnabled(false);//初始标题
buttonSend.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
字符串sms=textSMS.getText().toString();
试一试{
SmsManager SmsManager=smsmsmanager.getDefault();
sendTextMessage(numero,null,sms,null,null);
长时间=System.currentTimeMillis();
//游标cTmp=cr.query(uri,selection,Telephony.Sms.THREAD_ID+“=”“+idPerso+””,null,“date ASC”);
//cTmp.moveToFirst();
//int typeTmp=cTmp.getInt(2);
添加(新的CreateMessageAdapter(2,短信,时间));
textSMS.setText(“”);
adapter.notifyDataSetChanged();
Toast.makeText(getApplicationContext(),“SMS已发送!”,
Toast.LENGTH_LONG).show();
}捕获(例外e){
Toast.makeText(getApplicationContext(),“SMS失败,请稍后再试!”,Toast.LENGTH\u LONG.show();
e、 printStackTrace();
}
}
});
}
public void printMessage(){
//读取存储的短信
Uri=Telephony.Sms.CONTENT\u Uri;
ContentResolver cr=getContentResolver();
cursor=cr.query(uri,selection,Telephony.Sms.THREAD_ID+“=””+idPerso+“”,null,“date ASC”);
cursor.moveToFirst();
而(!cursor.isAfterLast()){
int type=cursor.getInt(2);
字符串体=cursor.getString(1);
long dateNumber=cursor.getLong(3);
long dateNumberSent=cursor.getLong(4);
如果(类型==2)
添加(新的CreateMessageAdapter(类型、正文、日期号));
else if(type==1 | | type==5 | | type==6)
添加(新的CreateMessageAdapter(类型、正文、日期编号));
cursor.moveToNext();
}
adapter=新消息适配器(列表,此);
ListView lv=(ListView)findViewById(R.id.lv_消息);
lv.setTranscriptMode(ListView.TRANSCRIPT\u MODE\u ALWAYS\u SCROLL);
lv.从底部开始(正确);
低压设置适配器(适配器);
lv.setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
@凌驾
长单击公共布尔值(AdapterView arg0、视图arg1、int pos、长id){
Toast.makeText(PrintMessage.this,“长点击位置:”+pos,Toast.LENGTH_long.show();
返回true;
}
});
}
public void onCreateContextMenu(最终上下文菜单,最终视图v,最终上下文菜单。上下文菜单信息菜单信息){
}
}
替换适配器=新消息适配器(列表,此)代码>
withadapter=newmessageadapter(列表,PrintMessage.this)代码>
在printMessage()
中,您收到了什么错误?没有,它给我这个错误“尝试调用虚拟方法”void com.ducha.training3.MessageAdapter.notifyDataSetChanged()”在空对象引用上,为什么为空???我加了点东西:/@S