2013-09-23 2 views
0

Я сейчас разрабатываю RSS-ридер и, похоже, сбой, и я не могу понять, как это исправить. Ранее, при нажатии на элемент (статью) в ListView, он открывал URL-адрес статьи в веб-представлении. Это не сработало, когда я попытался открыть веб-обзор статьи. Однако после внесения следующих изменений он сбой, когда я нажимаю на элемент (статью) в ListView.Приложение Crashing - Исключение Null Pointer [Android]

  1. Я удалил Web View класс и файл макета
  2. я заменил файл макета с нормальной относительной макете и установить вид контента новой деятельности, созданной, что я назвал «ArticleActivity»

Я намереваюсь использовать данные, проанализированные из статьи, и иметь возможность отображать их в макете таблицы или в представлении с относительной компоновкой.

ListRSSItemsActivity:

public class ListRSSItemsActivity extends ListActivity { 

    // Progress Dialog 
    private ProgressDialog pDialog; 

    // Array list for list view 
    ArrayList<HashMap<String, String>> rssItemList = new ArrayList<HashMap<String,String>>(); 

    RSSParser rssParser = new RSSParser(); 

    List<RSSItem> rssItems = new ArrayList<RSSItem>(); 

    RSSFeed rssFeed; 

    private static String TAG_TITLE = "title"; 
    private static String TAG_LINK = "link"; 
    private static String TAG_DESCRIPTION = "description"; 
    private static String TAG_PUBDATE = "pub_date"; 
    private static String TAG_GUID = "guid"; // not used 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.rss_item_list); 

     // get intent data 
     Intent i = getIntent(); 

     // SQLite Row id 
     Integer site_id = Integer.parseInt(i.getStringExtra("id")); 

     // Getting Single website from SQLite 
     RSSDatabaseHandler rssDB = new RSSDatabaseHandler(getApplicationContext()); 


     WebSite site = rssDB.getSite(site_id); 
     String rss_link = site.getRSSLink(); 

     /** 
     * Calling a backgroung thread will loads recent articles of a website 
     * @param rss url of website 
     * */ 
     new loadRSSFeedItems().execute(rss_link); 

     // selecting single ListView item 
     ListView lv = getListView(); 

     // Launching new screen on Selecting Single ListItem 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

       // getting listview 
       View v = (View)view.getParent(); 
       TextView tv = (TextView)v.findViewById(R.id.title); 
       String title = tv.getText().toString(); 
       String description = ((TextView) view.findViewById(R.id.link)).getText().toString(); 

       // Starting new intent 
       Intent in = new Intent(getApplicationContext(), ArticleActivity.class); 
       in.putExtra(TAG_TITLE, title); 
       in.putExtra(TAG_DESCRIPTION, description); 
       startActivity(in); 
      } 
     }); 
    } 

    /** 
    * Background Async Task to get RSS Feed Items data from URL 
    * */ 
    class loadRSSFeedItems extends AsyncTask<String, String, String> { 

     /** 
     * Before starting background thread Show Progress Dialog 
     * */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(
        ListRSSItemsActivity.this); 
      pDialog.setMessage("Loading recent articles..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     /** 
     * getting all recent articles and showing them in listview 
     * */ 
     @Override 
     protected String doInBackground(String... args) { 
      // rss link url 
      String rss_url = args[0]; 

      // list of rss items 
      rssItems = rssParser.getRSSFeedItems(rss_url); 

      // looping through each item 
      for(RSSItem item : rssItems){ 
       // creating new HashMap 
       HashMap<String, String> map = new HashMap<String, String>(); 

       // adding each child node to HashMap key => value 
       map.put(TAG_TITLE, item.getTitle()); 
       map.put(TAG_LINK, item.getLink()); 
       map.put(TAG_PUBDATE, item.getPubDate()); 


       // adding HashList to ArrayList 
       rssItemList.add(map); 
      } 

      // updating UI from Background Thread 
      runOnUiThread(new Runnable() { 
       public void run() { 
        /** 
        * Updating parsed items into listview 
        * */ 
        ListAdapter adapter = new SimpleAdapter(
          ListRSSItemsActivity.this, 
          rssItemList, R.layout.rss_item_list_row, 
          new String[] { TAG_LINK, TAG_TITLE, TAG_PUBDATE, TAG_DESCRIPTION }, 
          new int[] { R.id.page_url, R.id.title, R.id.pub_date, R.id.link }); 

        // updating listview 
        setListAdapter(adapter); 
       } 
      }); 
      return null; 
     } 

     /** 
     * After completing background task Dismiss the progress dialog 
     * **/ 
     protected void onPostExecute(String args) { 
      // dismiss the dialog after getting all products 
      pDialog.dismiss(); 
     } 
    } 
} 

rss_item_list_row.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="8dip"> 

    <TextView android:id="@+id/page_url" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:visibility="gone"/> 

    <!-- Article title --> 
    <TextView 
     android:id="@+id/title" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingBottom="1dip" 
     android:textSize="18sp" 
     android:textStyle="bold" 
     android:textColor="#303030" /> 

    <!-- published date --> 
    <TextView 
     android:id="@+id/pub_date" 
     android:layout_below="@id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingBottom="3dip" 
     android:textSize="14sp" 
     android:textColor="#b70400"/> 

    <!-- article description --> 
    <TextView android:id="@+id/link" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:paddingBottom="6dip" 
     android:textSize="15sp" 
     android:textColor="#8d8d8d" 
     android:layout_below="@id/pub_date"/> 
</RelativeLayout> 

StackTrace:

USER_COMMENT=null 
ANDROID_VERSION=4.1.2 
APP_VERSION_NAME=1.0 
BRAND=samsung 
PHONE_MODEL=GT-N8000 
CUSTOM_DATA= 
STACK_TRACE=java.lang.NullPointerException 
at com.j.infographx.ListRSSItemsActivity$1.onItemClick(ListRSSItemsActivity.java:74) 
at android.widget.AdapterView.performItemClick(AdapterView.java:301) 
at android.widget.AbsListView.performItemClick(AbsListView.java:1287) 
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3078) 
at android.widget.AbsListView$1.run(AbsListView.java:4161) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4921) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
at dalvik.system.NativeStart.main(Native Method) 

Насколько я могу судить, кажется, есть проблема на линии 74 в моем ListRSSItemsActivity класса, то есть,

String title = ((TextView) view.findViewById(R.id.view_title)).getText().toString(); 

Я не знаю, как это исправить, хотя. Кто-то может помочь?

+0

Вы можете оставить свой XML – Raghunandan

+0

В своем коде вы предполагаете вещи, чтобы не быть 'null', где они, возможно, могли бы быть. Например, что бы вы сделали, если 'view.findViewById (R.id.view_title)' ничего не нашел? – David

+0

попробуйте это 'View v = (View) view.getParent() TextView tv = (TextVuiew) v.findViewById (R.id.title). String title = tv.getText(). ToString() 'разместите свой' rss_item_list_row.xml' – Raghunandan

ответ

0

попробовать это

View v =(View) view.getParent(); 
    TextView tv = (TextView)v.findViewById(R.id.title). //id is title 
    String title = tv.getText().toString(); 

У вас есть эта

<TextView 
    android:id="@+id/title" 

Также

<!-- article description --> 
<TextView android:id="@+id/link" 

Вы

(TextView) view.findViewById(R.id.article_content) 
    //There is no view with id article_content in your xml 

Должно быть

TextView des = (TextView)v.findViewById(R.id.link); 
String description = des.getText().toString(); 
+0

Я попробовал то, что вы предложили, но он все еще падает. – Auge

+0

@ user2732849 он не должен публиковать обновленный код и logcat. вы использовали неверный идентификатор для 'findViewById'. где он падает, на какой строке – Raghunandan

+0

Мне пришлось сменить файл R.id.article_content на R.id.link. Приложение не разбивается, но оно открывает пустое действие - черный экран. Я хотел, чтобы он отображал текстовое представление данных, которые я проанализировал. – Auge

1

Текст TextView не получает инициализацию, поэтому getText() возвращает нулевое значение.

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