【问题标题】:Alternative to AsyncTask with HTTP POST request because it was deprecated使用 HTTP POST 请求替代 AsyncTask,因为它已被弃用
【发布时间】:2020-10-22 15:57:54
【问题描述】:

我在 5 年前制作了一个 android 应用程序,它使用 AsyncTask 创建一个 HTTP POST 请求以从服务器发送接收数据,并带有两个参数。任何帮助将不胜感激,谢谢

调用示例:

String asyncResult = new AsyncCall().execute(UrlServer, jsonData.toString()).get();

我的基本 AsyncTask 类

public class AsyncCall extends AsyncTask<String, String, String>{

private static final int CONNECTION_TIMEOUT=10000;
private static final int READ_TIMEOUT=15000;

@Override
protected void onPreExecute() {
    super.onPreExecute();

}
@Override
protected String doInBackground(String... params) {
    //URL: params[0]
    //JSON Data: params[1]
    
    // I made HTTP URL CONNECTION and store server data in result variable
}

@Override
protected void onPostExecute(String result) {

    return result;
}

【问题讨论】:

标签: java asynchronous android-asynctask http-post


【解决方案1】:

将 ExecutorService 与方法一起使用。

不是调用异步任务,而是调用带参数的方法。

String asyncResult = AsyncCall(UrlServer, jsonData.toString());

创建处理参数的方法。

public String AsyncCall(String UrlServer, String jsonData) {

private static final int CONNECTION_TIMEOUT=10000;
private static final int READ_TIMEOUT=15000;
private static String getResult = null;

  ExecutorService executor = Executors.newSingleThreadExecutor();
  Handler handler = new Handler(Looper.getMainLooper());
   
  executor.execute(() -> {
        //Background work here
        
    //URL: params[0]
    String URL = UrlServer;
    //JSON Data: params[1]
    String JSONData = jsonData;
    
    // I made HTTP URL CONNECTION and store server data in result variable
    
    getResult = result;
    
    handler.post(() -> {
        //UI Thread work here
        return result;
    });
  });
 }

【讨论】:

    【解决方案2】:

    对 http post 请求使用改造,因为它简单灵活。

    【讨论】:

      【解决方案3】:
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Handler handler = new Handler(Looper.getMainLooper());
        executor.execute(() -> {
              //Background work here
              handler.post(() -> {
                  //UI Thread work here
              });
        });
      

      【讨论】:

      • 欢迎来到 Stack Overflow。没有任何解释的代码转储很少有帮助。 Stack Overflow 是关于学习的,而不是提供 sn-ps 来盲目复制和粘贴。请edit您的问题并解释它如何回答所提出的具体问题。见How to Answer
      猜你喜欢
      • 2017-02-13
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多