我有以下代码,之前我添加了一些代码来保存收到的短信。
package com.example.smsTest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class SmsReceiver extends BroadcastReceiver {
private SQLiteAdapter mySQLiteAdapter;
@Override
public void onReceive(Context context, Intent intent) {
Message message = null;
Bundle extras = intent.getExtras();
if (extras == null)
return;
Object[] pdus = (Object[]) extras.get("pdus");
for (int i = 0; i < pdus.length; i++) {
SmsMessage SMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
String sender = SMessage.getOriginatingAddress();
String body = SMessage.getMessageBody().toString();
message = mySQLiteAdapter.createMessage(body);
// A custom Intent that will used as another Broadcast
Intent in = new Intent("SmsMessage.intent.MAIN").
putExtra("get_msg", sender+":"+body);
// To display a Toast whenever there is an SMS.
Toast.makeText(context,body,Toast.LENGTH_LONG).show();
//You can place your check conditions here(on the SMS or the sender)
//and then send another broadcast
context.sendBroadcast(in);
// This is used to abort the broadcast and can be used to silently
// process incoming message and prevent it from further being
// broadcasted. Avoid this, as this is not the way to program an app.
this.abortBroadcast();
}
}
}
我添加的导致此崩溃的代码如下:
private SQLiteAdapter mySQLiteAdapter;
Message message = null;
message = mySQLiteAdapter.createMessage(body);
这是createMessage函数的代码:
public Message createMessage(String message) {
String[] columns = new String[]{KEY_ID, KEY_CONTENT};
ContentValues values = new ContentValues();
values.put(KEY_CONTENT, message);
long insertId = sqLiteDatabase.insert(MYDATABASE_TABLE, null,
values);
Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE,
columns, KEY_ID + " = " + insertId, null,
null, null, null);
cursor.moveToFirst();
Message newMessage = cursorToMessage(cursor);
cursor.close();
return newMessage;
}
我不知道错误来自哪里。
答案 0 :(得分:2)
看起来你没有实例化mySQLiteAdapter
。您必须在访问它之前进行实例化。
答案 1 :(得分:0)
请评论此代码行,
Toast.makeText(context,body,Toast.LENGTH_LONG).show();
我认为这样可行,我在后台服务上遇到了与UI操作相同的问题,请使用代码,或者用Log.d(用日志替换)来记录信息