Синтаксический анализ XML в базе данных SQLite в Android

#android #sqlite #xml-parsing

#Android #sqlite #xml-синтаксический анализ

Вопрос:

Это мой первый проект для Android. Предполагается, что я должен проанализировать rss-канал из Интернета и поместить его в базу данных SQLite для автономного доступа к сообщениям канала. Я следовал руководству по синтаксическому анализу xml, написав «Зеленые роботы», и я следовал руководству по базе данных SQLite по проекту Code, но, пытаясь собрать их вместе, я столкнулся с проблемами.

Приложение построено на моем дроиде, но затем оно неожиданно останавливается во время этого метода в MainActivity:

 private void displayPosts(ArrayList<Post> posts) {

    //Create String Arrays to separate titles and dates
    Log.d("CGRParser", "Displaying Post Titles To User");
    ArrayList<String> post_headlines = new ArrayList<String>();
    ArrayList<String> post_pubDates = new ArrayList<String>();
    ArrayList<String> post_dbids = new ArrayList<String>();
    ArrayList<String> post_contents = new ArrayList<String>();

    //For every post in the ArrayList posts, it puts each attribute of the post into its own ArrayList
        // This should be getting stuff from the database and putting it into an ArrayList
    for (Post post : posts) {
        Log.d("CGRParser", "Post Title: "   post.getHeadline());
        post_headlines.add(post.getHeadline());
        post_pubDates.add(post.getPubDate());
        post_dbids.add(post.getDbid());
        post_contents.add(post.getContents());
            //it's breaking here
        dbh.AddPost(post);
    }

    this.post_headlines = post_headlines;
    this.post_pubDates = post_pubDates;
    this.post_dbids = post_dbids;
    this.post_contents = post_contents;

    //Create a ListAdapter to Display the Titles in the ListView
    ListAdapter adapter = new ArrayAdapter<String>(this, R.layout.episode_row, R.id.title, post_headlines);
    listview_posts.setAdapter(adapter);

    //Set Progress Bar Invisible since we are done with it
    progress_bar.setVisibility(ProgressBar.INVISIBLE);

}
  

Я сохранил функциональность из оригинального руководства. Все, что я изменил, это добавление dbh.AddPost(post); . dbh — это объект DatabaseHelper, объявленный в MainActivity. Каждый из этих списков массива объявлен в MainActivity, но они также объявлены в методе. Когда я отлаживаю его, и он попадает в dbh.AddPost(post); ThreadPoolExecutor.class запускает и говорит: «Источник не найден. Файл JAR /Users/Zach/Desktop/android-sdj-mac_x86/platforms/android-7/android.jar не имеет привязки к источнику. Вы можете прикрепить источник, нажав Прикрепить источник ниже. »

Мой главный вопрос: что я здесь делаю не так? Я не получаю никаких ошибок от этого, и я не понимаю, что это означает под вложением источника. Я чувствую, что есть причина, по которой ArrayLists объявляются как в методе, так и в MainActivity, и что я должен делать то же самое для dbh, но я не уверен, почему. Несмотря на это, создание DatabaseHelper в методе не будет работать в долгосрочной перспективе, так как приложению потребуется вводить новые сообщения из ленты, а установка старой базы данных на новую только с новыми сообщениями не будет работать.

РЕДАКТИРОВАТЬ: вот метод AddPost в DatabaseHelper:

 void AddPost(Post post){
    SQLiteDatabase db= this.getWritableDatabase();

    ContentValues cv=new ContentValues();
    cv.put(colDbid, post.getDbid());
    cv.put(colType, post.getType());
    cv.put(colSubType, post.getSubType());
    cv.put(colHeadline, post.getHeadline());
    cv.put(colContents, post.getContents());
    cv.put(colUrl, post.getUrl());
    cv.put(colImgUrl, post.getImgUrl());
    cv.put(colVidUrl, post.getVidUrl());
    cv.put(colPubDate, post.getPubDate());

    db.insert(postTable, colHeadline, cv);
    db.close();
}
  

Комментарии:

1. Не могли бы вы опубликовать содержимое dbh. Добавить сообщение?