Пинг сервис и ждать загрузки файла - PullRequest
1 голос
/ 21 ноября 2011

Пингует удаленный сервер и ждет получения данных

Привет, я создаю свое первое приложение для 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, но я думаю, что есть лучшее решение. Примечание. У меня нет контроля над выходом сервера, поэтому приходится иметь дело с тем, что у меня есть.

...