0

在我添加一些代码来保存收到的 SMS 之前,我有以下代码可以使用。

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

我不知道错误来自哪里。

4

2 回答 2

2

看起来你没有实例化mySQLiteAdapter. 您必须在访问它之前进行实例化。

于 2013-04-10T07:12:44.157 回答
0

请评论这行代码,

 Toast.makeText(context,body,Toast.LENGTH_LONG).show();

我认为这会起作用,我在后台服务上的 UI 操作遇到了同样的问题,请评论代码,或替换为 Log.d() 以记录信息

于 2013-04-10T07:15:32.647 回答