Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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 从线程访问主活动中的变量_Java_Android_Multithreading - Fatal编程技术网

Java 从线程访问主活动中的变量

Java 从线程访问主活动中的变量,java,android,multithreading,Java,Android,Multithreading,我有以下代码: public class MainActivity extends Activity { public String myString; ... public void updateString() { new Thread() { @Override public void run() { this.myString = "TEST"

我有以下代码:

 public class MainActivity extends Activity {
     public String myString;

     ...

     public void updateString()
     {
         new Thread() {
            @Override
            public void run() {
                 this.myString = "TEST";
            }
         }
     }
}


问题是我需要从线程更新myString,但我无法访问它。有什么建议吗?谢谢大家!

在这种情况下,创建一个自定义类,该类将实现Runnable并将myString作为参数传递给该类的构造函数,因此在创建Runnable对象时,它将存储在本地,需要时可以从run方法访问该对象。

您可以使用getter和setter,例如:

公共类MainActivity扩展了活动{ 公共字符串myString

 ...

 public void updateString()
 {
     new Thread() {
        @Override
        public void run() {
             setMyString("TEST");
        }
     }
 }

 public void setMyString(String myString){
     this.myString = myString;
 }

}

您可以通过这种方式使字符串全局化并更新它

public class MainActivity extends Activity {
     public String myString;

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

        updateString();
     }

     public void updateString()
     {
         new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                for(int i=0; i<10;i++){

                    myString=String.valueOf(i);

                    //log
                    Log.d("myString:",myString);
                }

            }
        }).start();

     }
公共类MainActivity扩展活动{
公共字符串myString;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
updateString();
}
公共void updateString()
{
新线程(newrunnable()){
@凌驾
公开募捐{
//TODO自动生成的方法存根

对于(int i=0;我看一看,使用一个布尔值,如果为true,则更改变量,例如,它不应该是
volatile