我正在使用线程执行 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/