Android 无法从BroadcastReceiver更改TextView内容

Android 无法从BroadcastReceiver更改TextView内容,android,string,broadcastreceiver,getter-setter,Android,String,Broadcastreceiver,Getter Setter,我正在尝试从BroadcastReceiver获取字符串,它将在我的活动中设置TextView的内容 我有两个Java类 MainActivity:它有一个文本视图,我想更改它的文本 batteryinfo:它扩展了广播接收机。这个班有 方法返回自定义字符串(getString()) 这是主活动的代码 package com.example.batteryhealth; import android.app.Activity; import android.content.Intent; im

我正在尝试从BroadcastReceiver获取字符串,它将在我的活动中设置TextView的内容

我有两个Java类

  • MainActivity:它有一个文本视图,我想更改它的文本

  • batteryinfo:它扩展了广播接收机。这个班有 方法返回自定义字符串(getString())

  • 这是主活动的代码

    package com.example.batteryhealth;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.BatteryManager;
    import android.os.Bundle;
    import android.view.Menu;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
        BatteryManager bm;
        TextView health;
        String string;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            health=(TextView)findViewById(R.id.textView1);
            //status=(TextView)findViewById(R.id.textView2);
            batteryinfo bmc= new batteryinfo(bm,string);
            this.registerReceiver(bmc, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    
            health.setText(bmc.gethealth());
    
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        } 
    
    以下是batteryinfo的代码:

    package com.example.batteryhealth;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.BatteryManager;
    
    public class batteryinfo extends BroadcastReceiver{
    
        BatteryManager bm;
        String health;
    
        public batteryinfo(BatteryManager b,String hea) {
            // TODO Auto-generated constructor stub
    
            this.bm=b;
            this.health=hea;
    
        }
    
    
    
    
        @Override
        public void onReceive(Context arg0, Intent intent) {
            // TODO Auto-generated method stub
        int i= intent.getIntExtra(bm.EXTRA_HEALTH, 0);
    
            boolean s=true;
    
    
            if(s=i==bm.BATTERY_HEALTH_COLD)
            {
               health="cold";
    
            }
            else if(s=i==bm.BATTERY_HEALTH_GOOD)
            {
                health="good";
            }
            else if (s=i==bm.BATTERY_HEALTH_OVERHEAT)
    
            {
                health="overheat"       ;
            }
            else if (s=i==bm.BATTERY_HEALTH_OVER_VOLTAGE)
            {
                health="overvolteage";
            }
    
        }
    
        public String gethealth()
        {
            return health;
        }
    
    }
    

    如果我在MainActivity中创建一个嵌套类(它也扩展了BroadcastReceiver),代码工作正常,但是在创建一个单独的类后,它不起作用,并且我的文本视图为空。

    在MainActivity中注册一个新的广播接收器,然后从batteryinfo类向MainActivity类发送广播,并更改MainActivity接收器中的文本

    在接收时在
    中放入
    日志.i
    ,看看是否收到了广播?@神秘魔法是对的。我们需要更多的细节。