Advertisement
OKIEWARDOYO

Android HeadFirst Error

Jul 3rd, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 6.59 KB | None | 0 0
  1. package id.mediatutorial.nasadailyimages;
  2.  
  3. import android.graphics.Bitmap;
  4. import android.graphics.BitmapFactory;
  5. import android.os.AsyncTask;
  6. import android.support.v7.app.AppCompatActivity;
  7. import android.os.Bundle;
  8. import android.widget.ImageView;
  9. import android.widget.TextView;
  10.  
  11. import org.xml.sax.Attributes;
  12. import org.xml.sax.InputSource;
  13. import org.xml.sax.SAXException;
  14. import org.xml.sax.XMLReader;
  15. import org.xml.sax.helpers.DefaultHandler;
  16.  
  17. import java.io.IOException;
  18. import java.io.InputStream;
  19. import java.net.HttpURLConnection;
  20. import java.net.URL;
  21.  
  22. import javax.xml.parsers.SAXParser;
  23. import javax.xml.parsers.SAXParserFactory;
  24.  
  25. public class MainActivity extends AppCompatActivity {
  26.     IotdHandler handler = new IotdHandler();
  27.     @Override
  28.     protected void onCreate(Bundle savedInstanceState) {
  29.         super.onCreate(savedInstanceState);
  30.         setContentView(R.layout.activity_main);
  31.         /****** IotdHandler *****/
  32.         handler.processFeed();
  33.  
  34.     }
  35.  
  36.     public void ResetDisplay() {
  37.  
  38.         String title = handler.getTitle();
  39.         String date = handler.getDate();
  40.         String description = handler.getDescription().toString();
  41.  
  42.         resetDisplay(title, date, handler.getImage(), description);
  43.     }
  44.  
  45.     private void resetDisplay(String title, String date, Bitmap image, String description) {
  46.         try {
  47.             TextView titleView = (TextView) findViewById(R.id.imageTitle);
  48.             titleView.setText(title);
  49.             TextView dateView = (TextView) findViewById(R.id.imageDate);
  50.             dateView.setText(date);
  51.             ImageView imageView = (ImageView) findViewById(R.id.imageDisplay);
  52.             imageView.setImageBitmap(image);
  53.             TextView descriptionView = (TextView) findViewById(R.id.imageDescription);
  54.             descriptionView.setText(description);
  55.         }catch(Exception e){
  56.             TextView titleView = (TextView) findViewById(R.id.imageTitle);
  57.             titleView.setText(e.toString());
  58.         }
  59.  
  60.     }
  61.  
  62.     public class IotdHandler extends DefaultHandler {
  63.         private String url = "http://www.nasa.gov/rss/image_of_the_day.rss";
  64.         private boolean inUrl = false;
  65.         private boolean inTitle = false;
  66.         private boolean inDescription = false;
  67.         private boolean inItem = false;
  68.         private boolean inDate = false;
  69.         private Bitmap image = null;
  70.         private String title = null;
  71.         private StringBuffer description = new StringBuffer();
  72.         private String date = null;
  73.  
  74.         public XMLReader reader = null;
  75.  
  76.         private Bitmap getBitmap(String url) {
  77.             try {
  78.                 HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
  79.                 connection.setDoInput(true);
  80.                 connection.connect();
  81.  
  82.                 InputStream input = connection.getInputStream();
  83.                 Bitmap bitmap = BitmapFactory.decodeStream(input);
  84.  
  85.                 input.close();
  86.  
  87.                 return bitmap;
  88.  
  89.             } catch (IOException ioe) {
  90.                 TextView titleView = (TextView) findViewById(R.id.imageTitle);
  91.                 titleView.setText(ioe.toString());
  92.                 return null;
  93.             }
  94.         }
  95.  
  96.         public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
  97.             if (localName.equals("enclosure")) {
  98.                 inUrl = true;
  99.             } else {
  100.                 inUrl = false;
  101.             }
  102.  
  103.             if (localName.startsWith("item")) {
  104.                 inItem = true;
  105.             } else if (inItem) {
  106.                 if (localName.equals("title")) {
  107.                     inTitle = true;
  108.                 } else {
  109.                     inTitle = false;
  110.                 }
  111.  
  112.                 if (localName.equals("description")) {
  113.                     inDescription = true;
  114.                 } else {
  115.                     inDescription = false;
  116.                 }
  117.  
  118.                 if (localName.equals("pubDate")) {
  119.                     inDate = true;
  120.                 } else {
  121.                     inDate = false;
  122.                 }
  123.             }
  124.         }
  125.  
  126.         public void characters(char ch[], int start, int length) {
  127.             String chars = new String(ch).substring(start, start + length);
  128.             if (inTitle && title == null) {
  129.                 title = chars;
  130.             }
  131.             if (inDescription) {
  132.                 description.append(chars);
  133.             }
  134.             if (inDate && date == null) {
  135.                 date = chars;
  136.             }
  137.         }
  138.  
  139.         private class ProcessFeedTask extends AsyncTask<String, Void, InputStream> {
  140.             @Override
  141.             protected InputStream doInBackground(String... params) {
  142.                 String url = params[0];
  143.  
  144.                 InputStream inputStream = null;
  145.  
  146.                 try {
  147.                     inputStream = new URL(url).openStream();
  148.  
  149.                     reader.parse(new InputSource(inputStream));
  150.  
  151.                 } catch (Exception e) {
  152.                     //TextView titleView = (TextView) findViewById(R.id.imageTitle);
  153.                     //titleView.setText(e.toString());
  154.                     //
  155.                     //i comment out two line above becose it always display error:
  156.                     // //method setText must be called from UI Thread
  157.                 }
  158.  
  159.                 return inputStream;
  160.             }
  161.  
  162.             @Override
  163.             protected void onPostExecute(InputStream result) {
  164.                 super.onPostExecute(result);
  165.  
  166.                 if (result != null) {
  167.                     ResetDisplay();
  168.                 }
  169.             }
  170.         }
  171.  
  172.         public void processFeed()
  173.         {
  174.             try
  175.             {
  176.                 SAXParserFactory factory = SAXParserFactory.newInstance();
  177.  
  178.                 SAXParser parser = factory.newSAXParser();
  179.  
  180.                 reader = parser.getXMLReader();
  181.                 reader.setContentHandler(this);
  182.  
  183.                 new ProcessFeedTask().execute(url);
  184.  
  185.             }
  186.             catch (Exception e)
  187.             {
  188.                 TextView titleView = (TextView) findViewById(R.id.imageTitle);
  189.                 titleView.setText(e.toString());
  190.             }
  191.         }
  192.  
  193.         public Bitmap getImage() {
  194.             return image;
  195.         }
  196.  
  197.         public String getTitle() {
  198.             return title;
  199.         }
  200.  
  201.         public String getDescription() {
  202.             return description.toString();
  203.         }
  204.  
  205.         public String getDate() {
  206.             return date;
  207.         }
  208.     }
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement