需要的println消息 [英] Println needs a message
本文介绍了需要的println消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图下面的应用程序,但是当我运行它,我得到一个异常的println需要megssage。可任何人的帮助。以下是类。
Receiver类
包com.sms;进口android.content.BroadcastReceiver;
进口android.content.Context;
进口android.content.Intent;
进口android.database.Cursor;
进口android.net.Uri;
进口android.os.Bundle;
进口android.provider.ContactsContract.PhoneLookup;
进口android.telephony.SmsMessage;
进口android.widget.Toast;公共类SMSReceiver扩展广播接收器
{
字符串名称= NULL;
私人语境mContext;
@覆盖
公共无效的onReceive(上下文的背景下,意图意图)
{
// TODO自动生成方法存根 INT N;
捆绑包= intent.getExtras();
对象的PDU [] =(Object []对象)bundle.get(的PDU);
SmsMessage smsMessage [] =新SmsMessage [pdus.length]
为(N = 0; N< pdus.length; N ++)
{
smsMessage [η] = SmsMessage.createFromPdu((字节[])的PDU [n]的);
}
//显示第一条消息
串SMS1 = smsMessage [0] .getMessageBody();
从= smsMessage [0] .getOriginatingAddress字符串();
//字符串名称= getDisplayNameFromPhoneNo(从);
乌里lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.en code(从));
光标C = context.getContentResolver()查询(lookupUri,新的String [] {} PhoneLookup.DISPLAY_NAME,NULL,NULL,NULL);
而(c.moveToNext()){
/ *如果我们找到一个匹配,我们把它放在一个字符串。* /
名称= c.getString(c.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
} //吐司面包= Toast.makeText(背景下,短信接收来自+而来,Toast.LENGTH_LONG);
//toast.show(); 的System.out.println(!!!!+姓名);
//Toast.makeText(context,姓名:+姓名,Toast.LENGTH_LONG).show();
意图sIntent =新意图(背景下,SMSTalk.class);
sIntent.putExtra(StringData是名);
context.startService(sIntent); / * SMSTalk smsTalk =新SMSTalk();
smsTalk.readName(名); * /
//context.startService(new意图(上下文,SMSTalk.class));
}
}
服务类
包com.sms;进口java.util.Locale中;进口android.app.Service;
进口android.content.Context;
进口android.content.Intent;
进口android.os.Bundle;
进口android.os.IBinder;
进口android.speech.tts.TextToSpeech;
进口android.speech.tts.TextToSpeech.OnInitListener;
进口android.speech.tts.TextToSpeech.OnUtteranceCompletedListener;
进口android.widget.Toast;公共类SMSTalk扩展服务实现OnInitListener,OnUtteranceCompletedListener {
公共静态文字转语音MTTS;
私人字符串spokenText;
公共弦乐味精= NULL;
INT标志= 0;
串温度;
上下文语境; @覆盖
公共无效的onCreate(){ //这是一个很好的地方设置spokenText
的System.out.println(服务创建);
//Toast.makeText(this,\"...>>>\"+msg,Toast.LENGTH_LONG).show(); } @覆盖
公众诠释onStartCommand(最终意图意图,诠释标志诠释startId)
{
MTTS =新的文字转语音(这一点,这一点);
弦乐味精= intent.getStringExtra(StringData是);
//Toast.makeText(this,服务启动+味精,Toast.LENGTH_SHORT).show();
的System.out.println($$$ ***+味精); Toast.makeText(这一点,服务启动的消息:+味精,Toast.LENGTH_SHORT).show(); //mTts.speak(msg,0,NULL); 返回START_STICKY; } @覆盖
公共无效的OnInit(最终诠释状态){ // TODO自动生成方法存根
如果(状态== TextToSpeech.SUCCESS){ mTts.setLanguage(Locale.UK);
Toast.makeText(getApplicationContext(),初始化成功,Toast.LENGTH_LONG).show();
mTts.speak(味精,0,NULL);
}
}
@覆盖
公共无效onUtteranceCompleted(字符串uttId){
stopSelf();
的System.out.println(onUtteranceCompleted+味精);
} @覆盖
公共无效的onDestroy(){
如果(MTTS!= NULL){
mTts.stop();
mTts.shutdown();
}
super.onDestroy();
} @覆盖
公众的IBinder onBind(意向为arg0){
返回null;
} / *公共无效readName(字符串TEMP)
{
味精=温度;
的System.out.println(HHHHHHHHHHHHHHHHHHH+味精);
mTts.speak(味精,TextToSpeech.QUEUE_ADD,NULL); } * / }
清单文件
<?XML版本=1.0编码=UTF-8&GT?;
<清单的xmlns:机器人=http://schemas.android.com/apk/res/android
包=com.sms
安卓版code =1
机器人:=的versionName1.0>
<应用机器人:图标=@绘制/图标机器人:标签=@字符串/ APP_NAME> <接收机器人:SMSReceiverNAME =机器人:启用=真正的>
&所述;意图滤光器>
<作用机器人:名字=android.provider.Telephony.SMS_RECEIVED/>
&所述; /意图滤光器>
< /接收器>
<服务机器人。SMSTalkNAME =
>< /服务> < /用途>
<采用-SDK安卓的minSdkVersion =10/>
<使用许可权的android:NAME =android.permission.RECEIVE_SMS>< /使用许可权>
<使用许可权的android:NAME =android.permission.READ_CONTACTS>< /使用许可权>
< /清单>
logcat的跟踪
15 09-16:35:19.015:ERROR / AndroidRuntime(1148):致命异常:主要
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):显示java.lang.NullPointerException:需要的println消息
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在android.util.Log.println_native(本机方法)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在android.util.Log.i(Log.java:158)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在android.speech.tts.TextToSpeech.speak(TextToSpeech.java:720)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在com.sms.SMSTalk.onInit(SMSTalk.java:56)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在android.speech.tts.TextToSpeech $ 1.onServiceConnected(TextToSpeech.java:451)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在android.app.LoadedApk $ ServiceDispatcher.doConnected(LoadedApk.java:1064)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在android.app.LoadedApk $ ServiceDispatcher $ RunConnection.run(LoadedApk.java:1081)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在android.os.Handler.handleCallback(Handler.java:587)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在android.os.Handler.dispatchMessage(Handler.java:92)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在android.os.Looper.loop(Looper.java:123)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在android.app.ActivityThread.main(ActivityThread.java:3647)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在java.lang.reflect.Method.invokeNative(本机方法)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在java.lang.reflect.Method.invoke(Method.java:507)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-16 15:35:19.015:ERROR / AndroidRuntime(1148):在dalvik.system.NativeStart.main(本机方法)
解决方案
显然,当它执行以下行信息
尚未初始化:
mTts.speak(味精,0,NULL);
因此,将其更改为
公共弦乐味精= NULL;
这样:
公共弦乐味精=;
还是取决于你想要做什么,用适当的内容进行初始化。
i am trying the following application but when i run it, i get an exception "println needs a megssage" .can anyone help. following are the classes.
Receiver class
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));
}
}
Service class
package com.sms;
import java.util.Locale;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.speech.tts.TextToSpeech.OnUtteranceCompletedListener;
import android.widget.Toast;
public class SMSTalk extends Service implements OnInitListener, OnUtteranceCompletedListener {
public static TextToSpeech mTts;
private String spokenText;
public String msg=null;
int flag=0;
String temp;
Context context;
@Override
public void onCreate() {
// This is a good place to set spokenText
System.out.println("SERVICE CREATED");
//Toast.makeText(this,"...>>>"+msg,Toast.LENGTH_LONG ).show();
}
@Override
public int onStartCommand(final Intent intent, int flags, int startId)
{
mTts=new TextToSpeech(this, this);
String msg=intent.getStringExtra("stringdata");
//Toast.makeText(this, "service starting "+ msg, Toast.LENGTH_SHORT).show();
System.out.println("$$$***"+msg);
Toast.makeText(this, "service starting message from: "+ msg, Toast.LENGTH_SHORT).show();
//mTts.speak(msg,0, null);
return START_STICKY;
}
@Override
public void onInit(final int status) {
// TODO Auto-generated method stub
if (status == TextToSpeech.SUCCESS) {
mTts.setLanguage(Locale.UK);
Toast.makeText(getApplicationContext(), "SUCCESSFULLY INITIALIZED",Toast.LENGTH_LONG).show();
mTts.speak(msg,0, null);
}
}
@Override
public void onUtteranceCompleted(String uttId) {
stopSelf();
System.out.println("onUtteranceCompleted"+msg);
}
@Override
public void onDestroy() {
if (mTts != null) {
mTts.stop();
mTts.shutdown();
}
super.onDestroy();
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
/* public void readName(String temp)
{
msg=temp;
System.out.println("HHHHHHHHHHHHHHHHHHH"+msg);
mTts.speak(msg, TextToSpeech.QUEUE_ADD, null);
}*/
}
manifest file
<?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>
logcat trace
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)
解决方案
Apparently when it executes the following line msg
is not yet initialized:
mTts.speak(msg,0, null);
So change this to
public String msg=null;
to this:
public String msg="";
Or depending on what you want to do, initialize it with appropriate content.
这篇关于需要的println消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文