【发布时间】: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);