Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从另一个类调用MainActivity类中的方法_Java_Android_Android Studio_Android Activity - Fatal编程技术网

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

Java 从另一个类调用MainActivity类中的方法,java,android,android-studio,android-activity,Java,Android,Android Studio,Android Activity,我想做的是从另一个子类调用MainActivity.java文件中的方法。但每次我想调用此方法时,我的应用程序都会崩溃 我已经尝试使SetGeratest为静态,但这并没有改变任何事情。此外,我可以构建apk而不出现任何错误,应用程序只有在从线程调用SetGerateStat时才会崩溃 我做错了什么 我的代码如下请注意,这只是一个片段: MainActivity.java: public class MainActivity extends AppCompatActivity implement

我想做的是从另一个子类调用MainActivity.java文件中的方法。但每次我想调用此方法时,我的应用程序都会崩溃

我已经尝试使SetGeratest为静态,但这并没有改变任何事情。此外,我可以构建apk而不出现任何错误,应用程序只有在从线程调用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;  
      }
}

你忘记初始化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);
        }
     }
 });}

您无法从中执行UI工作thread@PavneetSingh但实际执行UI工作的方法位于MainActivity文件中,只是从外部调用。我理解这里有什么错误吗?您需要在问题中包含失败的堆栈跟踪。感谢您的帮助,runOnUiThread的提示有效:gerätestat已初始化。我只是不知道我必须使用runOnUiThread,我想我可以将activity作为参数传递。感谢您的帮助: