从另一个类调用MainActivity类中的方法

时间:2016-09-26 12:23:30

标签: java android android-studio android-activity

我想要做的是调用一个方法,该方法放在另一个子类的MainActivity.java文件中。但每次我想调用这个方法时,我的应用程序崩溃了。

我已经尝试将SetGerateStat()设为静态,但这并没有改变任何东西。此外,我可以构建apk而不会出现任何错误,只有在从Thread调用SetGerateStat()时应用程序才会崩溃。

我在这里做错了什么?

我的代码如下(请注意,这只是一个代码段): MainActivity.java:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private CheckedTextView gerätestat;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);       
}  

public void setGeraeteStat(boolean x) {
    if (x==true) {
        gerätestat.setCheckMarkDrawable(android.R.drawable.presence_online);
    } else {
        gerätestat.setCheckMarkDrawable(android.R.drawable.presence_busy);
    }
}

public void onClick(View v) {
    if(v==button_refresh) {            
        Thread connection = new Thread(new Conn("refresh", MainActivity.this));
        connection.start();
    }
}

Conn.java:

public class Conn implements Runnable {
private MainActivity act;
private String actioncommand;

public Conn(String a) {
    actioncommand = a;
    act = null;
}

public Conn(String a, MainActivity m) {
    actioncommand = a;
    act = m;
}

public void run() {
     switch(actioncommand) {               
        case "refresh": {
            act.setGeraeteStat(true);                    
        }
        break;  
      }
}

1 个答案:

答案 0 :(得分:0)

你忘了初始化gerätestat吗?你必须在setcontentview之后初始化gerätestat。之后使用runOnUIThread方法如下

 public void setGeraeteStat(final boolean x){
 runOnUiThread (new Runnable() { 
     public void run() {
         if (x==true) {
          gerätestat.setCheckMarkDrawable(android.R.drawable.presence_online);
        } else {
         gerätestat.setCheckMarkDrawable(android.R.drawable.presence_busy);
        }
     }
 });}