Я пишу приложение, в котором есть GCM. Я не пытаюсь конкурировать с Whatsapp. Это должно быть своего рода доска объявлений между всеми теми, кто использует это приложение.Активность сообщений Android GCM - перезагружается, когда начинается действие
Приложение открывается с помощью меню кнопок, и один из них направляет пользователя в действие «Сообщения».
Пока вы остаетесь на этом мероприятии, сообщения там, и все работает так, как должно быть.
Но если я вернусь к активности меню, а затем вернусь к активности сообщений, все сообщения исчезнут и не будут показаны.
Я использую ListActivity для сообщений и функцию onCreate, уничтожая текущий список каждый раз, когда он читается.
Мой вопрос в том, как я могу вернуться к активности сообщений, не потеряв их? Я хочу иметь его, как в Whatsapp, когда вы идете в Whatsapp, сообщения всегда есть!
Я думал о сохранении списка сообщений в файл, а затем прочитал его (или, скажем, последние 40-50 сообщений) в любое время, когда вызывается onCreate. Это хорошее решение? Есть ли решение без сохранения списка в файл?
Вот некоторые из моего кода внутри активности сообщений:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_msg_main);
Intent in = getIntent();
username = in.getStringExtra("username");
password = in.getStringExtra("password");
nickname = in.getStringExtra("nickname");
messages = new ArrayList<Message>();
txtNewMsg = (EditText) this.findViewById(R.id.text);
adapter = new MessagesAdapter(this, messages);
setListAdapter(adapter);
registerReceiver(mHandleMessageReceiver, new IntentFilter(DISPLAY_MESSAGE_ACTION));
}
private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String newMessage = intent.getExtras().getString(EXTRA_MESSAGE);
// Waking up mobile if it is sleeping
WakeLocker.acquire(getApplicationContext());
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
String currentDateandTime = sdf.format(new Date());
Spanned newMessageDate = Html.fromHtml("<small><i><font color=\"red\">" + currentDateandTime + "</font></i></small>" + " " + "<small><i><font color=\"blue\">" + nickname + "</font></i></small>" + "<br />" + newMessage);
addNewMessage(new Message(newMessageDate, true));
WakeLocker.release();
}
};
@Override
protected void onDestroy() {
if (mRegisterTask != null) {
mRegisterTask.cancel(true);
}
try {
unregisterReceiver(mHandleMessageReceiver);
GCMRegistrar.onDestroy(this);
} catch (Exception e) {
Log.e("UnRegister Receiver Error", "> " + e.getMessage());
}
super.onDestroy();
}
void addNewMessage(Message m)
{
messages.add(m);
adapter.notifyDataSetChanged();
getListView().setSelection(messages.size()-1);
}
код включает в себя: OnCreate, BroadcastReceiver (GCM приемник), OnDestroy и addNewMessage который добавляет новое сообщение в списке сообщений.
Спасибо за помощь!
AJ
Спасибо за ваш быстрый ответ! Позвольте мне попробовать это и вернуться к вам. Но подумайте о Whatsapp, каждый раз, когда вы открываете сообщения, они уже есть. Только при загрузке «более ранних сообщений» вы вытаскиваете их из удаленной базы данных. Сохраняют ли они текущую историю в базе данных по телефону? Должен ли я делать то же самое? Во всяком случае, я собираюсь сделать то, что вы предлагаете, и я вернусь к вам! –
Да whatsapp хранит сообщения в базе данных устройства, даже они хранят изображение большого пальца в базе данных тоже, когда интернет-соединение недоступно, а также вы можете прочитать существующее сообщение – Pratik
Ваше решение работает как шарм! Спасибо за помощь. Я реализовал базу данных для сообщений. Теперь каждый раз, когда вы входите в действие, старые сообщения загружаются из базы данных SQL! Спасибо чувак! –