java - 从线程返回字符串 Android Java

标签 java android multithreading android-fragments android-intent

我正在使用线程执行 HttpURLConnection 并从数据库中获取数据。下面的代码代表了我想要完成的任务,但我收到了一个错误

str_Data = "John Doe";

错误:从内部类中访问变量“str_Data”

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.MainActivity);

    String str_Name = "";

    str_Name = setDataToText(str_Url);

}

 private String setDataToText(String urlStr) {
    final String url = urlStr;
    String str_Data = "";

    new Thread() {
        public void run() {
            //A code to retrieve data is executed
            //Data is Converted and added to the string str_Data;
            str_Data = "John Doe";
        }
    }
    return str_Data;
}

我想将 new Thread() 上的 run() 操作中的 str_Data 值设置为从数据库恢复的数据。

编辑: 这就是我解决问题的方法,如果使用此方法时这不是一个好的做法,请告诉我,感谢您的帮助:

String str_Data = "";

public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.MainActivity);

setDataToText(str_Url);
txtName.setText(str_Data);
}

private void setDataToText(String urlStr) {
    new Thread(new Runnable() {
    @Override
        public void run() {
        // TODO Auto-generated method stub
        //A code to retrieve data is executed
        //Data is Converted and added to the string str_Data;
        str_Data = "John Doe";
        }
    }).start();
}

最佳答案

正确的方法是使用 Callable 和 Future 接口(interface)。

public static void main(String[] args) throws ExecutionException, InterruptedException {
   ExecutorService executorService = Executors.newSingleThreadExecutor();
   CallableClass callableClass = new CallableClass();
   Future<String> future = executorService.submit(callableClass);

   String name = future.get();
   System.out.println(name);
}

public class CallableClass implements Callable<String> {

    @Override
    public String call() throws Exception {
       return "John Doe";
    }
}

关于java - 从线程返回字符串 Android Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30972822/

相关文章:

java - 如何获取hyper-v虚拟机的总cpu使用率

c - 为什么 pthread_cond_signal 有时不起作用?

java - String.replaceAll() 和 [\d]* 在字符之间追加替换字符串,为什么?

java - 呈现的 JSF 不工作

java - 从 URL 部分加载图像,就像在 WhatsApp 中实现的一样

java - Android - 从 ListView 中删除项目,但不从数据库中删除项目

java - 在 Android Studio 中设置移动按钮的计时器

android - 如何在两个VideoView中同时显示同一视频

java - 如何从 JUnit 线程中断信号量?

java - 如何在 Linux 和 eclipse 中为 JNI 配置创建 makefile