Это мой первый 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();
}