Пингует удаленный сервер и ждет получения данных
Привет, я создаю свое первое приложение для Android, и я дошел до того, что не могу найти решение, даже не зная, что искать в Google.
Итак, проблема: я пропингую удаленный сервер с GET-запросом через приложение, передавая некоторые параметры, такие как file_id. Затем сервер возвращает подтверждение, если файл существует, или ошибку в противном случае, оба в виде простого текста. Строка ошибки: $$$ ERROR $$$. На самом деле подтверждением является строка JSON, которая содержит путь к файлу. Если файл не существует на сервере, он генерирует сообщение об ошибке и начинает загрузку файла и его обработку, что обычно занимает 10-30 секунд. Как лучше всего проверить, готов ли файл для загрузки? У меня есть класс DownloadFile, который расширяет AsyncTask, но прежде чем я достигну точки для загрузки файла, мне нужен URL, который зависит от предыдущего запроса, который находится в главном классе в потоке пользовательского интерфейса. Вот некоторый код:
public class MainActivity extends Activity {
private String getInfo() {
// Create a new HttpClient and Post Header
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpPost = new HttpGet(infoUrl);
StringBuilder sb = null;
String data;
JSONObject jObject = null;
try {
HttpResponse response = httpClient.execute(httpPost);
// This might be equal "$$$ERROR$$$" if no file exists
sb = inputStreamToString(response.getEntity().getContent());
} catch(ClientProtocolException e) {
// TODO Auto-generated catch block
Log.v("Error: pushItem ClientProtocolException: ", e.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
Log.v("Error: pushItem IOException: ", e.toString());
}
// Clean the data to be complaint JSON format
data = sb.toString().replace("info = ", "");
try {
jObject = new JSONObject(data);
data = jObject.getString("h");
fileTitle = jObject.getString("title");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
downloadUrl = String.format(downloadUrl, fileId, data);
return downloadUrl;
}
}
Таким образом, моя идея заключалась в том, чтобы получить содержимое и, если оно равно $$$ ERROR $$$, зацикливаться до тех пор, пока не будут переданы данные JSON, но я думаю, что есть лучшее решение. Примечание. У меня нет контроля над выходом сервера, поэтому приходится иметь дело с тем, что у меня есть.