2011-02-18 91 views
2

晚报:)如何更改文本上一个TextView

我有一个小问题...

正如你可以在下面我的代码,我正在尝试的setText在TextView的,看到的是越来越我一个空指针:(

有没有人能告诉我,我做错了吗?:)

而且字符串s心不是空,或者是视图本身。它在oncreate()中设置文本时正在工作。

谢谢..

public class smsShower extends Activity{ 

    private TextView status; 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.show); 
     //status = (TextView)findViewById(R.id.status); 

     status = (TextView)findViewById(R.id.status); 
    } 

    public void displayText(String s){ 

     status.setText(s); 

    } 

} 

smsReceiverclass:

public class smsreceiver extends BroadcastReceiver { 


    private String str; 

    private boolean received = false; 

    private smsShower smsshow; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
      //---get the SMS message passed in--- 
     Bundle bundle = intent.getExtras();  
     smsshow = new smsShower(); 

     SmsMessage[] msgs = null; 
     str = "";    
     if (bundle != null) 
     { 

      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length]; 


      for (int i=0; i<msgs.length; i++){ 

       msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 

       if(msgs[i].getDisplayOriginatingAddress().equals("1990")) 
       { 
        received = true; 
        str += msgs[i].getMessageBody().toString(); 

        smsshow.displayText(str); 



       } 

布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

<TextView android:id="@+id/status" android:layout_alignParentTop="true" android:text="Status:" android:layout_height="match_parent" android:layout_width="match_parent"></TextView> 
</RelativeLayout> 

错误日志:

02-18 01:14:20.064: ERROR/AndroidRuntime(18964): Caused by: java.lang.NullPointerException 
02-18 01:14:20.064: ERROR/AndroidRuntime(18964):  at com.sms1990.smsShower.displayText(smsShower.java:36) 
02-18 01:14:20.064: ERROR/AndroidRuntime(18964):  at com.sms1990.smsreceiver.onReceive(smsreceiver.java:47) 
02-18 01:14:20.064: ERROR/AndroidRuntime(18964):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2941) 
+0

s字符串从broadcastreceiver传递...并成功传递。我检查了一些log.w的:) – Roskvist 2011-02-18 00:34:00

回答

0

添加一个基本无效检查的过程如下:

public void displayText(String s){ 
    if (status != null) 
    status.setText(s); 

} 

你会不会得到NPE。你如何开始活动并在广播接收者中获得参考?

4

displayText在哪里被调用?是否有可能在onCreate之前呼叫(或至少在onCreate完成之前)?如果是,您将得到NullPointerException,因为status尚未设置。

+0

那么...我有一个类,它发送和短信,因此一个PendingIntent pi = PendingIntent.getActivity(this,0, 新的意图(sms1990.this,smsShower.class), 0);被创建... smsShower.class是displayText所在的位置...通过使用onCreate被使用?对 ? ...并且从广播接收器调用displayText(处理返回的短信)。返回的短信作为displayText中的s参数传递。 – Roskvist 2011-02-18 00:37:09

0

我试图检查被调用的onCreate当...

public class smsShower extends Activity{ 

    private TextView status; 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.show); 


     status = (TextView)findViewById(R.id.status); 
     status.setText("NewTEXT!!!!!"); 
    } 

我的onCreate做了的setText,当应用程序发送短信:

public void sendStatusSMS(String fra,String til) 
    {   
    String s = "DSB "+fra+" "+til; 

    PendingIntent pi = PendingIntent.getActivity(this, 0, 
      new Intent(sms1990.this, smsShower.class), 0);     
    SmsManager sms = SmsManager.getDefault(); 
    sms.sendTextMessage("1990", null, s, pi, null); 

的的PendingIntent负责启动SmsShower,并通过这样做来调用oncreate。

,因此smsreceiver被调用displayText()OnCreate中调用后..如果我理解正确..

但仍然是frigin空指针

0

当我看到它的第四个参数的sms.sendTextMessage("1990", null, s, pi, null)功能,pi PendingIntent将在消息发送后启动smsShower Activity。

我看不出有什么地方是夹在你的广播接收器的意图从何而来?你不能直接在smsShower onCreate()中直接从Intent中解析“pdus”吗? (特别是当pi PendingIntent启动Activity时,而不是触发BroadcastReceiver,因为它在您的代码中声明)。

我也有你所得到的onReceive()功能,您smsShower活动的参考方式的不好的感觉。在函数的第二行创建一个新的smsShower,但不能保证它与先前启动的Activity相同。这其实或多或少地是一个保证,它的不是相同的Activity。

相关问题