在 Android studio java 中将 AsyncTask 转换为 RxJava

Convert AsyncTask to RxJava in Android studio java

提问人:W 3 提问时间:2/19/2023 最后编辑:akarnokdW 3 更新时间:2/19/2023 访问量:48

问:

首先,我是 android studio 上的 java 新手,并尝试使用 asyncTask 使用 github 中的代码。但是,AsyncTask 已被弃用,因此需要根据我的建议将其替换为 rxJava。如果有人帮助将下面的代码转换为 rxJava,我将不胜感激。谢谢。

private class DownloadTask extends AsyncTask<String, Void, String> {

    // Downloading data in non-ui thread
    @Override
    protected String doInBackground(String... url) {

        // For storing data from web service
        String data = "";

        try{
            // Fetching the data from web service
            data = downloadUrl(url[0]);
            Log.d("DownloadTask","DownloadTask : " + data);
        }catch(Exception e){
            Log.d("Background Task",e.toString());
        }
        return data;
    }

    // Executes in UI thread, after the execution of
    // doInBackground()
    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        ParserTask parserTask = new ParserTask();

        // Invokes the thread for parsing the JSON data
        parserTask.execute(result);
    }
}

/** A class to parse the Google Directions in JSON format */
private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>> >{

    // Parsing the data in non-ui thread
    @Override
    protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) {

        JSONObject jObject;
        List<List<HashMap<String, String>>> routes = null;

        try{
            jObject = new JSONObject(jsonData[0]);
            DirectionsJSONParser parser = new DirectionsJSONParser();

            // Starts parsing data
            routes = parser.parse(jObject);
        }catch(Exception e){
            e.printStackTrace();
        }
        return routes;
    }
java android android-studio android-asynctask rx-java

评论

0赞 Gabe Sechan 2/19/2023
如您所知,它不需要被 RxJava 替换。AsyncTask 已被弃用,因为它不像您想象的那样工作(所有 AsyncTasks 都在单个线程上运行),因此它实际上用于网络很糟糕(单个任务将阻止所有其他任务,直到完成)。在 Kotlin 中,它应该被协程所取代。在 Java 中,只需创建自己的线程即可最容易地替换它,
0赞 Gabe Sechan 2/19/2023
此外,这本来就是糟糕的代码。这里不应该有两个 AsyncTask。它应该是一项同时完成这两件事的任务。第二个任务除了额外的线程切换外,从未导致任何操作发生。

答: 暂无答案