2015-08-12 3 views
3

Я следую за Head First Android Development, я застрял в главе 3 в ежедневном адаптере изображения NASA, я просмотрел stackOverFlow, и вы, ребята, предположили, что я использую AsyncTask, [link] это вопрос, который обсуждал проблему. Android Head First "NASA daily image App"исключение во время выполнения при использовании AsyncTask

и вот код, который я пытаюсь с:

public class MainActivity extends ActionBarActivity { 

IotdHandler handler; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    IotdHandler handler=new IotdHandler(); 
    new AsyncTaskClass().execute(); 
} 

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); 
      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;} 
} 

public class AsyncTaskClass extends AsyncTask<Void,Void,Void> 
{ 
    @Override 
    protected Void doInBackground(Void...params) { 
     handler.processFeed(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     resetDisplay (handler.getTitle(), handler.getDate(), handler.getImage(), handler.getDescription()); 
     super.onPostExecute(result); 
    } 
} 

private void resetDisplay(String title,String date,Bitmap imageDisplay,StringBuffer description) 
{ 
    TextView titleView=(TextView) findViewById(R.id.imageTitle); 
    titleView.setText(title); 

    TextView dateView=(TextView) findViewById(R.id.imageDate); 
    dateView.setText(date); 

    ImageView imageView=(ImageView) findViewById(R.id.imageDisplay); 
    imageView.setImageBitmap(imageDisplay); 

    TextView descriptionView = (TextView) findViewById(R.id.imageDescription); 
    descriptionView.setText(description); 
} 

} 

Теперь у меня была проблема с методом doInBackGround он говорит (Пустота ... PARAMS) что это значит? Правильно ли это написать? Затмение дает мне исключение времени выполнения, который говорит:

08-12 20:42:29.894: E/AndroidRuntime(28819): FATAL EXCEPTION: AsyncTask #1 
08-12 20:42:29.894: E/AndroidRuntime(28819): Process: com.example.rssimages, PID: 28819 
08-12 20:42:29.894: E/AndroidRuntime(28819): java.lang.RuntimeException: An error occured while executing doInBackground() 

спасибо за вашу помощь

+0

Не могли бы вы выслать код, который у вас есть? –

ответ

2

... это что-то известное как переменную длиной. По существу вы можете передать 0-n (переменные аргументы). Подробнее см. Здесь: https://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

Если вы связываете код, вам будет легче помочь вам исправить ваш AsyncTask.

+0

Я только что редактировал вопрос, отправляя его код, который у меня есть –

Смежные вопросы