我想从在线API获取数据,但这是一个非常多的数据,(从英语翻译1000个单词到给定语言)。
问题是api给了一个" url to long"当我发送超过800个单词时,我想在两个请求中请求数据。
我是否可以同时发送两个HttpReader请求,如果他们想要同时调用setOnResultReadyListener或者是否会丢弃秒结果,它是否会像等待行一样进入?
那么可以一次请求两次,还是应该等到一个完成后再发送下一个请求? (来自api的平均响应时间约为7秒)
我现在的代码:
final ListView listviewTalen = (ListView) (view).getParent();
final Taal taal = (Taal) listviewTalen.getItemAtPosition(selectedItemPosition);
view.setBackgroundColor(ContextCompat.getColor(settingsView.getContext(), R.color.DarkGrey));
List<OpgeslagenWoord> opgeslagenWoorden = db.getOpgeslagenWoordenByTaalId(8);
// <----------------------------------------------------->
// < HTTP REQUEST OM 1000 WOORDEN TE VERTALEN >
// <----------------------------------------------------->
HttpReader httpReader = new HttpReader();
httpReader.setOnResultReadyListener(new HttpReader.OnResultReadyListener() {
@Override
public void resultReady(String result) {
if (result != null) {
JsonHelper jsonHelper = new JsonHelper();
TextHelper textHelper = new TextHelper();
List<OpgeslagenWoord> opgeslagenWoorden = textHelper.duizendWoordenStringNaarObjecten(jsonHelper.getTranslation(result), (int) taal.getId());
for (OpgeslagenWoord opgeslagenwoord: opgeslagenWoorden) {
db.insertOpgeslagenWoord(opgeslagenwoord);
}
Toast.makeText(getActivity(), "The words are saved", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity(), "An error occured", Toast.LENGTH_LONG).show();
}
view.setBackgroundColor(ContextCompat.getColor(settingsView.getContext(), R.color.white));
talen.remove(taal);
((ArrayAdapter<Taal>)listviewTalen.getAdapter()).notifyDataSetChanged();
}
});
String httpReaderUrl = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=";
String alleTalenAlsString = "";
for (OpgeslagenWoord opgeslagenwoord: opgeslagenWoorden) {
alleTalenAlsString += opgeslagenwoord.getNaam();
alleTalenAlsString += " _ ";
}
httpReaderUrl += apiKey;
httpReaderUrl += "&lang=en-";
httpReaderUrl += taal.getTaalCode();
httpReaderUrl += "&text=";
httpReaderUrl += alleTalenAlsString;
httpReaderUrl = httpReaderUrl.replace(" ", "%20");
httpReader.execute(httpReaderUrl);