#android #rss #progress-bar
#Android #RSS-канал #индикатор выполнения
Вопрос:
Я все еще работаю над своим приложением, которое должно хранить данные RSS локально. Пока что мне удалось создать локальную базу данных и проанализировать онлайн-RSS-канал. Мне также удалось поместить эту информацию в базу данных, так что теперь приложение также будет доступно в автономном режиме.
Однако я не могу понять, как сделать следующее: у меня есть 2 кнопки, одна из них считывает заголовки базы данных и переходит на подробную страницу вашего выбора (все еще работаю над этим)
Моя текущая проблема заключается в том, что я не могу добавить панель загрузки, которая будет появляться на экране, пока приложение загружает данные из Интернета. Экран остается пустым примерно на 10 секунд, а затем появляется список. вот код, который я использую:
общедоступный класс SynchDB_Activity расширяет ListActivity {
public List<Message> messages;
public List<String> titles;
//ProgressDialog dialog = ProgressDialog.show(SynchDB_Activity.this, "", "Downloading data...", true);
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.animal_list_view);
loadFeed();
}
private void loadFeed(){
try{
BaseFeedParser parser = new BaseFeedParser();
messages = parser.parse();
List<String> titles = new ArrayList<String>(messages.size());
DBAdapter db = new DBAdapter(this);
for (Message msg : messages){
titles.add(msg.getTitle());
db.addRow(
msg.getTitle(),
msg.getDescription(),
"bla",
"http:/",
msg.getLink());
}
//dialog.dismiss();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.row,titles);
this.setListAdapter(adapter);
} catch (Throwable t){
Log.e("AndroidNews",t.getMessage(),t);
}
}
Итак, этот код работает и помещает все данные в локальную базу данных. Однако я просто не могу заставить эту панель загрузки работать, и это сводит меня с ума.
Если бы кто-нибудь мог мне помочь, я был бы благодарен!!! Я весь день гуглил, и, похоже, ничего не помогает….
большое спасибо
редактировать: Как вы можете видеть в коде, я отображаю список, когда все готово. Это необязательно, но с того момента, как я удаляю ArrayAdapter, приложение больше не будет работать.
Имейте в виду, что все это для меня совершенно ново, и я думаю, что основная часть, где что-то идет не так, — это использование разных макетов…
Ответ №1:
Используйте асинхронную задачу и индикатор выполнения, как показано здесь:
public void getrss()
{
try{
class test extends AsyncTask{
TextView tv_per;
int mprogress;
Dialog UpdateDialog = new Dialog(ClassContext);
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
mprogress = 0;
UpdateDialog.setTitle(getResources().getString(R.string.app_name));
UpdateDialog.setContentView(R.layout.horizontalprogressdialog);
TextView dialog_message = (TextView)UpdateDialog.findViewById(R.id.titleTvLeft);
tv_per = (TextView)UpdateDialog.findViewById(R.id.hpd_tv_percentage);
dialog_message.setText(getResources().getString(R.string.dialog_retrieving_data));
dialog_message.setGravity(Gravity.RIGHT);
UpdateDialog.setCancelable(false);
UpdateDialog.show();
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Object... values) {
// TODO Auto-generated method stub
ProgressBar update = (ProgressBar)UpdateDialog.findViewById(R.id.horizontalProgressBar);
update.setProgress((Integer) values[0]);
int percent = (Integer) values[0];
if(percent>=100)
{
percent=100;
}
tv_per = (TextView)UpdateDialog.findViewById(R.id.hpd_tv_percentage);
tv_per.setText("" percent);
}
@Override
protected Object doInBackground(Object... params) {
// TODO Auto-generated method stub
//your code
}
super.onPostExecute(result);
UpdateDialog.dismiss();
}
}
new test().execute(null);
}
catch(Exception e)
{
e.printStackTrace();
}
}
Комментарии:
1. Спасибо за ответ, однако я не уверен, как реализовать код, который вы мне дали, Как должно выглядеть представление, чтобы это работало? Также я получаю ошибку в «ClassContext» и некоторые ошибки о правильном использовании токенов «{«»}» Есть ли шанс, что вы могли бы опубликовать проект intire? это облегчило бы мне понимание того, что я делаю неправильно. Спасибо
2. Можете ли вы выделить строки, в которых вы получаете ошибки? и вам нужен файл макета updatedialog?
3. Эй, я попробовал несколько версий вашего кода и в конечном итоге разобрался, большое спасибо за быстрый ответ, приятель!
Ответ №2:
Вы, вероятно, хотите использовать AsyncTask.