Przykład z książki nie działa

0

Witam,
na wstępie przepraszam za mało klarowny temat, ale szczerze nie wiedziałem co napisać. Uczę się androida z Head First. Mój problem polega na tym, że mam kod jak w książce, a mimo to aplikacja nie działa. Dokładniej mówiąc po uruchomieniu jest pusty ekran, zero elementów (załącznik). Poniżej kod:

Parser


import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.jar.Attributes;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class IotdHandler extends DefaultHandler {
    private String url = "http://www.nasa.gov/rss/image_of_the_day.rss";
    private boolean inUrl = false;
    private boolean inTitle = false;
    private boolean inDescription = false;
    private boolean inItem = false;
    private boolean inDate = false;
    private Bitmap image = null;
    private String title = null;
    private StringBuffer description = new StringBuffer();
    private String date = null;
    public void processFeed() {
        try {
            SAXParserFactory factory =
                    SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();
            XMLReader reader = parser.getXMLReader();
            reader.setContentHandler(this);
            InputStream inputStream = new URL(url).openStream();
            reader.parse(new InputSource(inputStream));
        } catch (Exception e) {

        }
    }

    private Bitmap getBitmap(String url) {
        try {
            HttpURLConnection connection =
                    (HttpURLConnection) new URL(url).openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap bitmap = BitmapFactory.decodeStream(input);
            input.close();
            return bitmap;
        } catch (IOException ioe) {
            return null;
        }
    }
    public void startElement(String uri, String localName, String qName,
                             Attributes attributes) throws SAXException {
        if (localName.equals("url")) { inUrl = true; }
        else { inUrl = false; }
        if (localName.startsWith("item")) { inItem = true; }
        else if (inItem) {
            if (localName.equals("title")) { inTitle = true; }
            else { inTitle = false; }
            if (localName.equals("description")) { inDescription = true; }
            else { inDescription = false; }
            if (localName.equals("pubDate")) { inDate = true; }
            else { inDate = false; }
        }
    }
    public void characters(char ch[], int start, int length) {
        String chars = new String(ch).substring(start, start + length);
        if (inUrl && url == null) { image = getBitmap(chars); }
        if (inTitle && title == null) { title = chars; }
        if (inDescription) { description.append(chars); }
        if (inDate && date == null) { date = chars; }
    }
    public Bitmap getImage() { return image; }
    public String getTitle() { return title; }
    public StringBuffer getDescription() { return description; }
    public String getDate() { return date; }
}

Activity


import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IotdHandler handler = new IotdHandler();
        handler.processFeed();
        resetDisplay(handler.getTitle(), handler.getDate(), handler.getImage(), handler.getDescription());
    }

    private void resetDisplay(String title, String date, Bitmap imageUrl, StringBuffer description) {
        TextView imageTitle = (TextView) findViewById(R.id.imageTitle);
        imageTitle.setText(title);
        TextView imageDate = (TextView) findViewById(R.id.imageDate);
        imageDate.setText(date);
        ImageView imageDisplay = (ImageView) findViewById(R.id.imageDisplay);
        imageDisplay.setImageBitmap(imageUrl);
        TextView imageDescription = (TextView) findViewById(R.id.imageDescription);
        imageDescription.setText(description);

    }
}

Output logcat

 
02-05 15:58:21.651 6001-6001/? I/art: Not late-enabling -Xcheck:jni (already on)
02-05 15:58:21.821 6001-6001/pl.example.nasadailyimage W/System: ClassLoader referenced unknown path: /data/app/pl.example.nasadailyimage-2/lib/x86
02-05 15:58:22.241 6001-6028/pl.example.nasadailyimage D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
02-05 15:58:22.376 6001-6028/pl.example.nasadailyimage I/OpenGLRenderer: Initialized EGL, version 1.4
02-05 15:58:22.465 6001-6028/pl.example.nasadailyimage W/EGL_emulation: eglSurfaceAttrib not implemented
02-05 15:58:22.469 6001-6028/pl.example.nasadailyimage W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xad6f39e0, error=EGL_SUCCESS

Szczerze przyznam, że nie wiem co robię źle. Jak wspominałem to przykład z książki. Serdecznie dziękuję wszystkim za pomoc, przykład ten skutecznie zahamował mnie w dalszej nauce i muszę się z nim uporać :D
Pozdrawiam

0

No to przykra sprawa, o ile nie jest to moja wina :) W takim wypadku mógłby ktoś powiedzieć/nakierować co poprawić w tym kodzie (nie pisać wszystko od nowa), tak abym mógł przejść dalej?

0

Ktoś jest w stanie mi pomóc? Wybaczcie natrętność, ale chciałbym przejść dalej z nauką. A ten dział tłumaczy kilka istotnych zagadnień.
Pozdrawiam

0

Coś źle przepisałeś. Zuważ, że image jest ustawiane tylko tu

        if (inUrl && url == null) { image = getBitmap(chars); }

ale url nigdy nie jest nullem

Nie miało tam być image zamiast url?

0

Spróbuj przykłady z githuba pobierać i przepisywać na nowo. http://dogriffiths.github.io/HeadFirstAndroid/ ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1