gpt4 book ai didi

java - 处理少量网络请求的正确方法

转载 作者:行者123 更新时间:2023-12-02 00:42:13 24 4
gpt4 key购买 nike

我对 java/android 还很陌生。我正在编写 android 应用程序,它从在线 api 获取数据。问题是,我不确定我的想法是否正确。因此,我的应用程序发送第一个请求,但我需要一些响应数据来启动下一个请求。

以下是一些示例,或多或少是现在的样子:

public class MainActivity extends AppCompatActivity{
private int key = 0;

protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


new DownloadTask().execute("url of 1st request");
}

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

@Override
protected String doInBackground(String... params) {
try {
return downloadContent(params[0]);
} catch (IOException e) {
return "Unable to retrieve data. URL may be invalid.";
}
}

@Override
protected void onPostExecute(String result) {
if(key == 0){

// I know it's 1st request because my key == 0

JSONObject json = new JSONObject(result);
String id = json.getString("id");
key++;
new DownloadTask().execute( "url of 2nd request/" + id );
}else{

// I know it's 2st request because my key != 0

//here I'm getting data i need

// and I'm going to rest of my app
end(result);
}
}
}

private void end(String result){
//rest of my app
}

}

代码运行良好,但我想知道这是否是正确的方法。也许您知道另一种方法来做到这一点,我并不要求全新的代码,但也许我应该找到并阅读一些主题。

最佳答案

如果你想异步执行,我建议你使用 CompletableFuture。它非常简单,看起来像这样:

CompletableFuture
.supplyAsync(() -> yourFirstrequest())
.thenApplyAsync(yourInstance::getResponse)
.thenAcceptAsync(nextRequestClass::sendNextrequest);

或者你可以用 Future 来分隔它们,例如:

CompletableFuture firstRequest =  CompletableFuture.supplyAsync(() -> yourFirstrequest());
CompletableFuture getResponse = firstRequest.thenApply(response -> someActionWithResponse(response));

这是一个非常强大和方便的框架。看看java docsandroid specific docs

关于java - 处理少量网络请求的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57926104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com