Разбор XML в базу данных SQLite в Android - PullRequest
2 голосов
/ 13 октября 2011

Это мой первый Android-проект. Я должен проанализировать RSS-канал из Интернета и поместить его в базу данных SQLite для автономного доступа к сообщениям канала. Я следовал учебнику xml от Coding Green Robots и следовал учебнику базы данных SQLite по проекту кода, но, пытаясь соединить их вместе, я столкнулся с проблемами.

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

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

РЕДАКТИРОВАТЬ: Вот метод 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...