从 for 循环调用异步 Web 服务



当我从 for 循环调用 Web 服务以使用 PHP 将数据插入/更新到 MySQL 中时,只有最后一项入/更新,因为(我认为(for 循环比 web 服务完成得更快,我如何延迟我的 for 循环或实现对 for 循环中返回的每个项目的 Web 服务调用一个接一个。

对于循环代码:

for (int i = 0; i < lv.getCount(); i++) {
view = lv.getAdapter().getView(i, lv.getChildAt(i), lv);
if (view != null) {
// Getting my views
tvItem = (TextView) view.findViewById(R.id.tvItem);
strItem = tvItem.getText().toString();
//Call AsyncTask
accessWebService();
}
}

网络服务:

private class Webservice extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(params[0]);
try {
HttpResponse response = httpclient.execute(httppost);
jsonResult = inputStreamToString(response.getEntity().getContent()).toString();
}
catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

private StringBuilder inputStreamToString(InputStream is) {
String rLine = "";
StringBuilder answer = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
try {
while ((rLine = rd.readLine()) != null) {
answer.append(rLine);
}
}
catch (IOException e) {
}
return answer;
}
@Override
protected void onPostExecute(String result) {
try{
ld();
}catch (Exception e){
}
}
}// end async task
public void accessWebService() {
Webservice task = new Webservice();
//Update MySQL Using PHP
}

当你想插入/更新来自for循环的所有数据时,你必须使用类似接口的回调。实现此操作后,它将等待完成该过程。完成后,它将调用成功或错误方法。在此基础上,您可以插入/更新另一条记录。

interface DataCallback {
fun onSuccess(result: Any)
fun onError(error: Any)
}
public void getCountries(new DataCallback(){
@Override
public void onSuccess(Object result){
// insert/update next record
}
@Override
public void onError(Object error){
// show error message
}
});

这只是一个例子。您应该根据需要转换它。谢谢。

最新更新