【问题标题】:How to run AsyncTask in Android?如何在 Android 中运行 AsyncTask?
【发布时间】: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);

标签: android android-asynctask


【解决方案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 类中,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多