Получение xml с сервера методом GET

💡 Усі статті, обговорення, новини про Java — в одному місці. Приєднуйтесь до Java спільноти!

Доброго времени суток.
Пытаюсь получить xml с сайта, чтобы отпарсить его, но почему то метод doInBackground возвращает мне null
Раньше использовал этот же код и все работало, а сейчас почему то нет. Может быть дело в том, что раньше все было в одном файле, а сейчас разбил все по классам.
Подскажите пожалуйста в чем проблема.

package classes;

import android.os.AsyncTask;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URISyntaxException;

/**
 * Created by Mikhail on 28.03.2015.
 */
public class GetXMLFromServer {

    InputStreamReader reader;

    public GetXMLFromServer(){
        //reader = null;
    }

    public InputStreamReader getReaderWithXML(String url){

        GetXMlTask task = new GetXMlTask(url);
        task.execute(url);

        return reader;
    }

    public void setReader(InputStreamReader newReader){
        this.reader = newReader;
    }


    class GetXMlTask extends AsyncTask<String, Integer, InputStreamReader>{

        String url;

        public GetXMlTask(String url){
            this.url = url;
        }

        @Override
        protected InputStreamReader doInBackground(String... params) {
            InputStreamReader iStream = null;
            try {
                iStream = new InputStreamReader(getUrlData(params[0]));
            } catch (URISyntaxException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return iStream;
        }

        @Override
        protected void onPostExecute(InputStreamReader inputStreamReader) {
            super.onPostExecute(inputStreamReader);
            setReader(inputStreamReader);
        }

        public InputStream getUrlData(String urlString) throws URISyntaxException, IOException {
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet method = new HttpGet(urlString);
            HttpResponse res = client.execute(method);
            return res.getEntity().getContent();
        }
    }
}

Ссылка на само приложение:
github.com/mrabaev48/Currency

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

там не null, бо www.ecb.europa.eu/...fxref/eurofxref-daily.xml не null.
Проблема в тому, що асинктаск використовується неправильно. Він стартує і одразу вичитуються дані. Очевидно, що завантажитись вони не встигли. Для роботи з UI потоком є onPostExecute. В даному випадку потрібно або лишати код в актівіті, або вішати якийсь лістенер на асинктаск і нотифікувати по закінченню завантаження

а можно по поводу листнера по подробнее?

HttpResponse res = client.execute(method);
Після цієї стрічки додайте для перевірки це:

StatusLine status = res.getStatusLine();
if (status.getStatusCode() != 200) {
Log.d(tag, “HTTP error. Invalid server status code: ” + res.getStatusLine());
}

Да, спасибо. Но это не решило проблему(

Підписатись на коментарі