有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

广播接收器中的java启动活动导致应用程序崩溃

我创建了一个应用程序,当我打开蓝牙时,会显示一个祝酒词,并启动一个新的活动。这是我的广播接收机课程:

public class BroadCast extends BroadcastReceiver {

    String prefs="myPrefs";
    String count="myCount";
    static int counter=0;
    Intent i;

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        String bluth = arg1.getAction();
        if (bluth.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
            if(arg1.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) == BluetoothAdapter.STATE_ON){
                SharedPreferences sp = arg0.getSharedPreferences(prefs, Context.MODE_PRIVATE);
                Editor ed = sp.edit();
                ed.putInt(count, counter);
                ed.commit();
                counter++;
                Toast.makeText(arg0, "Bluetooth on " + sp.getInt(count, 0), Toast.LENGTH_LONG).show();
                i = new Intent(arg0, Indicators.class);
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                arg0.startActivity(i);
                Indicators.on.setVisibility(View.VISIBLE);
            } else if (arg1.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) == BluetoothAdapter.STATE_OFF) {

            } else if (arg1.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) == BluetoothAdapter.STATE_TURNING_OFF) {

            } else if (arg1.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) == BluetoothAdapter.STATE_TURNING_ON) {

            }
        }
    }
}

现在没有问题了。活动正在开始,但在上面的代码中

Indicators.on.setVisibility(View.VISIBLE);

然后运行应用程序,它崩溃了

实际上on是一个textview obj,我在Indicators class中定义如下:

public class Indicators extends Activity {
    static TextView on, off, opening, closing;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.textviewbluetooth);

        opening = (TextView)findViewById(R.id.textView1);
        on = (TextView)findViewById(R.id.textView2);
        closing = (TextView)findViewById(R.id.textView3);
        off = (TextView)findViewById(R.id.textView4);
        opening.setVisibility(View.INVISIBLE);
        on.setVisibility(View.INVISIBLE);
        off.setVisibility(View.INVISIBLE);
        closing.setVisibility(View.INVISIBLE);
    }
}

我应该如何删除此错误


共 (2) 个答案

  1. # 1 楼答案

    class YourActivity extends xxxx {
       private static YourActivity mInst;
    
       public static YOurActivity instance() {
                 return mInst;
       }
    
       /// Do your task here.
       public void setViewText(xxxx) ;
    
       @Override
       public void onStart() {
         ...
         mInst = this;
       }
    
       @Override
       public void onStop() {
         ...
         mInst = null;
       }
    }
    

    在你的收音机里:

    YOurActivity inst = YOurActivity.instance();
       if(inst != null)  { // your activity can be seen, and you can update it's context 
           inst.setViewText...
       }
    
  2. # 2 楼答案

    放这条线

                    on.setVisibility(View.VISIBLE);
    

    活动内部->;onCreate()方法

    不要使用活动类成员的静态引用,如活动本身外部的文本视图,因为它可能已被销毁或尚未创建。一般来说,这是不好的做法

    编辑:如果您需要一个标志来显示指示器,请在Activity starter intent中添加一个额外的内容