如何在 Android 中运行 AsyncTask?
Posted
技术标签:
【中文标题】如何在 Android 中运行 AsyncTask?【英文标题】:How to run AsyncTask in Android? 【发布时间】:2020-12-30 02:21:14 【问题描述】:我之前编写了一个简单的货币转换器程序,它通过汇率 API 获取实时汇率转换。完整代码在这里:https://github.com/LaChope/expenses-robot
我想知道重用大部分代码来构建 android 应用程序,但我真的不熟悉 AsyncTask 并且知道如何实现它(我需要它来处理 GET 请求)。
这是我目前所实施的,但我不确定这是正确的继续方式。
我的转换器类:
public class Converter extends AsyncTask<Void, Void, Float>
private final RestTemplate restTemplate = new RestTemplate();
private final EditText baseCurrency;
private final EditText targetCurrency;
private final EditText amount;
public Converter(EditText baseCurrency, EditText targetCurrency, EditText amount)
this.baseCurrency = baseCurrency;
this.targetCurrency = targetCurrency;
this.amount = amount;
@Override
protected Float doInBackground(Void... voids)
String url = "https://api.exchangeratesapi.io/latest?" + baseCurrency;
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
ObjectMapper mapper = new ObjectMapper();
JsonNode root = null;
try
root = mapper.readTree(responseEntity.getBody());
catch (IOException e)
e.printStackTrace();
String rates1 = "rates";
JsonNode name = root.get(rates1);
JsonNode rates = name.get(String.valueOf(targetCurrency));
float rate = rates.floatValue();
return rate;
@Override
protected void onPostExecute(Float rate)
super.onPostExecute(rate);
output.setText();
return;
我的 MainActivity 类:
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
public void displayResult(View view)
EditText textBaseCurrency = (EditText) findViewById(R.id.base_currency);
EditText textTargetCurrency = (EditText) findViewById(R.id.target_currency);
EditText textAmount = (EditText) findViewById(R.id.amount);
TextView output = (TextView) findViewById(R.id.result);
output.setInputType(InputType.TYPE_CLASS_NUMBER);
Converter converter = new Converter(textBaseCurrency, textTargetCurrency, textAmount);
output.setText();
如何将我在 Converter 类中进行的转换的输出传达给 MainActivity 以显示它?
【问题讨论】:
converter.execute();
丢失。在 onPostExecute 中,您可以显示结果,这就是您几乎要做的。 output.setText(result);
【参考方案1】:
将 AsyncTask 初始化为
Converter converter = new Converter(textBaseCurrency, textTargetCurrency, textAmount);
converter.execute();
然后AsyncTask中的代码就开始执行了。
在onPostExecute(Float rate)
中分配output.setText();
。
【讨论】:
问题是output.setText();
需要TextView output = (TextView) findViewById(R.id.result); output.setInputType(InputType.TYPE_CLASS_NUMBER);
而我不能把它放在Converter.java
类中,对吧?以上是关于如何在 Android 中运行 AsyncTask?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Android开发中用AsyncTask异步更新UI界面
如何在android的Asynctask中显示json响应[重复]