Android Println需要一条消息
我正在尝试以下应用程序,但当我运行它时,我得到一个异常“println需要一个消息”。有人能帮我吗。以下是课程 接收器类别Android Println需要一条消息,android,Android,我正在尝试以下应用程序,但当我运行它时,我得到一个异常“println需要一个消息”。有人能帮我吗。以下是课程 接收器类别 package com.sms; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import an
package com.sms;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.PhoneLookup;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class SMSReceiver extends BroadcastReceiver
{
String name=null;
private Context mContext;
@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
int n;
Bundle bundle = intent.getExtras();
Object pdus[] = (Object[]) bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[pdus.length];
for (n = 0; n < pdus.length; n++)
{
smsMessage[n] = SmsMessage.createFromPdu((byte[]) pdus[n]);
}
// show first message
String sms1 = smsMessage[0].getMessageBody();
String from = smsMessage[0].getOriginatingAddress();
//String name = getDisplayNameFromPhoneNo( from);
Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(from));
Cursor c = context.getContentResolver().query(lookupUri, new String[]{PhoneLookup.DISPLAY_NAME}, null, null, null);
while(c.moveToNext()){
/* If we find a match we put it in a String.*/
name = c.getString(c.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
}
//Toast toast = Toast.makeText(context, "SMS Received from: " + from, Toast.LENGTH_LONG);
//toast.show();
System.out.println("!!!!"+name);
//Toast.makeText(context, "name: " + name, Toast.LENGTH_LONG).show();
Intent sIntent=new Intent(context,SMSTalk.class);
sIntent.putExtra("stringdata",name);
context.startService(sIntent);
/*SMSTalk smsTalk = new SMSTalk();
smsTalk.readName(name);*/
//context.startService(new Intent(context,SMSTalk.class));
}
}
清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sms"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".SMSReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
<service android:name=".SMSTalk"
></service>
</application>
<uses-sdk android:minSdkVersion="5" />
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
</manifest>
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): FATAL EXCEPTION: main
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): java.lang.NullPointerException: println needs a message
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at android.util.Log.println_native(Native Method)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at android.util.Log.i(Log.java:158)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at android.speech.tts.TextToSpeech.speak(TextToSpeech.java:720)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at com.sms.SMSTalk.onInit(SMSTalk.java:56)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at android.speech.tts.TextToSpeech$1.onServiceConnected(TextToSpeech.java:451)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1064)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1081)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at android.os.Handler.handleCallback(Handler.java:587)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at android.os.Handler.dispatchMessage(Handler.java:92)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at android.os.Looper.loop(Looper.java:123)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at android.app.ActivityThread.main(ActivityThread.java:3647)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at java.lang.reflect.Method.invokeNative(Native Method)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at java.lang.reflect.Method.invoke(Method.java:507)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-16 15:35:19.015: ERROR/AndroidRuntime(1148): at dalvik.system.NativeStart.main(Native Method)
显然,当它执行以下行时,
msg
尚未初始化:
mTts.speak(msg,0, null);
所以把这个改成
public String msg=null;
为此:
public String msg="";
或者根据您想要做的事情,使用适当的内容初始化它。我认为这行的
onInit()方法中的mTts.speak(msg,0,null)代码>为空。请添加一个空检查。保留断点并尝试调试。+1。在onStartCommand
中还有一个msg
,一个作为类成员。删除onStartCommand中的msg
声明。是的,谢谢varun..这就是问题所在。现在它已更正。Thanx all
public String msg="";