2015-04-20 3 views
2

Я довольно новичок в программировании на Android, и в целом мне не хватает навыков программирования. Я следил за учебником Head Start, хотя я знаю, что его технически удаляли для обновления или чего-то еще. в любом случае я встал на части, где они просто хотят, чтобы вы скопировали и ввели код, чтобы получить RSS-канал NASA и приложение Android для связи друг с другом, но по той или иной причине ничего не отображается. Я просто получаю белый экран, и ошибки logcat, похоже, мало чем помогают другим приложениям из того, что я видел. тестовые данные, которые я использовал, так я думаю, что xml отлично, возможно, это моя Java. Кажется, я ничего не могу найти. Может ли кто-нибудь увидеть, что я делаю неправильно. Пробовал все выходные. Это может быть скопированный код, но я этого не понимаю.Не могу получить учебник для Android, новичок программист

package love.android.nasadailyimage; 

import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ImageView; 
import android.widget.TextView; 

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 NasaDailyImage extends ActionBarActivity { 

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


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_nasa_daily_image, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    public class IotdHandler extends DefaultHandler { 
     private String url = "http://www.nasa.gov/rss/dyn/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 = null; 
     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; 
     } 
    } 


    private void resetDisplay(String title, String date, Bitmap image, 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(image);///////////////////////////////////////// 

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

} 

XML в случае помогает

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 

     tools:context=".NasaDailyImage"> 

     <TextView 
      android:id="@+id/imageTitle" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/image_title" /> 

     <TextView 
      android:id="@+id/imageDate" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/image_date" /> 

     <ImageView 
      android:id="@+id/imageDisplay" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:src="@mipmap/galaxy" 
      android:scaleType="fitXY" 
      android:adjustViewBounds="true"/> 


     <TextView 
      android:id="@+id/imageDescription" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/image_description" /> 


    </LinearLayout> 
</ScrollView> 

Любая помощь будет очень ценна. Я бы спросил кого-то здесь, но в моей стране «Намибия» очень мало людей, которые занимаются программированием в андроидах, к которым у меня есть доступ.

мой LogCat от моего S4 устройства

04-20 11:07:17.204 25660-25660/love.android.nasadailyimage W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection 
04-20 11:07:17.204 25660-25660/love.android.nasadailyimage W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection 
04-20 11:07:17.209 25660-25660/love.android.nasadailyimage W/IInputConnectionWrapper﹕ getSelectedText on inactive InputConnection 
04-20 11:07:17.209 25660-25660/love.android.nasadailyimage W/IInputConnectionWrapper﹕ getTextAfterCursor on inactive InputConnection 
04-20 11:12:38.244 25660-25660/love.android.nasadailyimage W/IInputConnectionWrapper﹕ getExtractedText on inactive InputConnection 
04-20 11:12:38.244 25660-25660/love.android.nasadailyimage W/IInputConnectionWrapper﹕ getTextBeforeCursor on inactive InputConnection 
04-20 11:12:38.244 25660-25660/love.android.nasadailyimage W/IInputConnectionWrapper﹕ getSelectedText on inactive InputConnection 
04-20 11:12:38.249 25660-25660/love.android.nasadailyimage W/IInputConnectionWrapper﹕ getTextAfterCursor on inactive InputConnection 
04-20 11:16:06.154 30742-30742/love.android.nasadailyimage W/ApplicationPackageManager﹕ getCSCPackageItemText() 
04-20 11:16:06.154 30742-30742/love.android.nasadailyimage I/PersonaManager﹕ getPersonaService() name persona_policy 
04-20 11:16:06.229 30742-30742/love.android.nasadailyimage I/dalvikvm﹕ Could not find method android.view.ViewGroup.onNestedScrollAccepted, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onNestedScrollAccepted 
04-20 11:16:06.229 30742-30742/love.android.nasadailyimage W/dalvikvm﹕ VFY: unable to resolve virtual method 12208: Landroid/view/ViewGroup;.onNestedScrollAccepted (Landroid/view/View;Landroid/view/View;I)V 
04-20 11:16:06.229 30742-30742/love.android.nasadailyimage D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000 
04-20 11:16:06.229 30742-30742/love.android.nasadailyimage I/dalvikvm﹕ Could not find method android.view.ViewGroup.onStopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onStopNestedScroll 
04-20 11:16:06.229 30742-30742/love.android.nasadailyimage W/dalvikvm﹕ VFY: unable to resolve virtual method 12214: Landroid/view/ViewGroup;.onStopNestedScroll (Landroid/view/View;)V 
04-20 11:16:06.229 30742-30742/love.android.nasadailyimage D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000 
04-20 11:16:06.234 30742-30742/love.android.nasadailyimage I/dalvikvm﹕ Could not find method android.support.v7.internal.widget.ActionBarOverlayLayout.stopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.setHideOnContentScrollEnabled 
04-20 11:16:06.234 30742-30742/love.android.nasadailyimage W/dalvikvm﹕ VFY: unable to resolve virtual method 9779: Landroid/support/v7/internal/widget/ActionBarOverlayLayout;.stopNestedScroll()V 
04-20 11:16:06.234 30742-30742/love.android.nasadailyimage D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x000e 
04-20 11:16:06.244 30742-30742/love.android.nasadailyimage I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations 
04-20 11:16:06.244 30742-30742/love.android.nasadailyimage W/dalvikvm﹕ VFY: unable to resolve virtual method 392: Landroid/content/res/TypedArray;.getChangingConfigurations()I 
04-20 11:16:06.244 30742-30742/love.android.nasadailyimage D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
04-20 11:16:06.244 30742-30742/love.android.nasadailyimage I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType 
04-20 11:16:06.244 30742-30742/love.android.nasadailyimage W/dalvikvm﹕ VFY: unable to resolve virtual method 414: Landroid/content/res/TypedArray;.getType (I)I 
04-20 11:16:06.244 30742-30742/love.android.nasadailyimage D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
04-20 11:16:06.244 30742-30742/love.android.nasadailyimage I/dalvikvm﹕ Could not find method android.content.res.Resources.getDrawable, referenced from method android.support.v7.internal.widget.ResourcesWrapper.getDrawable 
04-20 11:16:06.249 30742-30742/love.android.nasadailyimage W/dalvikvm﹕ VFY: unable to resolve virtual method 355: Landroid/content/res/Resources;.getDrawable (ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable; 
04-20 11:16:06.249 30742-30742/love.android.nasadailyimage D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
04-20 11:16:06.249 30742-30742/love.android.nasadailyimage I/dalvikvm﹕ Could not find method android.content.res.Resources.getDrawableForDensity, referenced from method android.support.v7.internal.widget.ResourcesWrapper.getDrawableForDensity 
04-20 11:16:06.249 30742-30742/love.android.nasadailyimage W/dalvikvm﹕ VFY: unable to resolve virtual method 357: Landroid/content/res/Resources;.getDrawableForDensity (IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable; 
04-20 11:16:06.249 30742-30742/love.android.nasadailyimage D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
04-20 11:16:06.369 30742-30742/love.android.nasadailyimage D/dalvikvm﹕ GC_FOR_ALLOC freed 130K, 6% free 16994K/18052K, paused 15ms, total 15ms 
04-20 11:16:06.389 30742-30742/love.android.nasadailyimage I/dalvikvm-heap﹕ Grow heap (frag case) to 28.887MB for 11943952-byte allocation 
04-20 11:16:06.404 30742-30751/love.android.nasadailyimage D/dalvikvm﹕ GC_FOR_ALLOC freed 4K, 4% free 28654K/29720K, paused 12ms, total 12ms 
04-20 11:16:06.479 30742-30742/love.android.nasadailyimage I/System.out﹕ main(HTTPLog):SmartBonding Enabling is false, log to file is false, DBG is false 
04-20 11:16:06.594 30742-30742/love.android.nasadailyimage D/OpenGLRenderer﹕ Enabling debug mode 0 

AndroidManifest по запросу

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="love.android.nasadailyimage" > 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".NasaDailyImage" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
    <uses-permission android:name="android.permission.INTERNET"/> 

</manifest> 

build.gradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 21 
    buildToolsVersion "21.1.2" 

    defaultConfig { 
     applicationId "love.android.nasadailyimage" 
     minSdkVersion 11 
     targetSdkVersion 21 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.0.0' 
} 

EDIT: добавлен мой LogCat и мои AndroidManifest

+0

просто предложение. это очень хороший ресурс, чтобы начать изучать андроид. https://www.udacity.com/course/ud853 –

+0

ваш logcat пожалуйста –

+0

ваш манифест имеет право разрешения? можете ли вы их показать? –

ответ

0

Ваш проблема, вероятно, в вашем build.gradle файла, проверьте зависимости, вы увидите что-то вроде этого:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.0.0' 
} 

Вы можете попробовать копировать склеивание, что над вашими зависимостями.

+0

Извините, пришлось следить за некоторой работой. Мои текущие зависимости выглядят как следующие зависимости: { compile fileTree (dir: 'libs', include: ['* .jar']) compile 'com.android.support:appcompat-v7:22.0.0'} ' –

+0

Извините, не совсем понимаю, как правильно отформатировать, я добавлю свой build.gradle в свой вопрос. –

+0

Правильно, поэтому они выглядят точно так же, но я все же скопировал их, чтобы дважды проверить, и все еще кажется, что я показываю пустой экран. Я вижу панель заголовка, но только ни один из моих элементов текста или изображения не отображается. –

1

Обнаружили вопрос, связанный с StackOverflow, который соответствует тому же учебнику, что и вы. Может быть, это может помочь вам

Android Head First "NASA daily image App"

Как уже упоминалось, вы должны использовать AsyncTask и обработать запрос, когда он возвращается (onPostExecute). Проблема с вашим кодом заключается в том, что вы отправляете запрос, и сразу после того, как вы вызываете resetDisplay, и ответ еще не вернулся ... вот почему вы видите пустой экран.

+0

Спасибо, я проверю, когда у меня появится шанс. В настоящий момент работа немного беспокойна. –

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