2014-10-31 2 views
0

Я пишу приложение, в котором есть 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

ответ

1

Создание базы данных с таблицы сообщений и пользователей таблицы, которые будут храниться сообщения и пользователей детали.

Теперь, когда новое сообщение приходит в базу данных, а затем, когда вы открываете приложение с ограниченным доступом приложения из таблицы. Если приложение открыто, и сообщение приходит первым в вашей базе данных и добавляет в ваш объект списка и отменяет ваш список.

+0

Спасибо за ваш быстрый ответ! Позвольте мне попробовать это и вернуться к вам. Но подумайте о Whatsapp, каждый раз, когда вы открываете сообщения, они уже есть. Только при загрузке «более ранних сообщений» вы вытаскиваете их из удаленной базы данных. Сохраняют ли они текущую историю в базе данных по телефону? Должен ли я делать то же самое? Во всяком случае, я собираюсь сделать то, что вы предлагаете, и я вернусь к вам! –

+0

Да whatsapp хранит сообщения в базе данных устройства, даже они хранят изображение большого пальца в базе данных тоже, когда интернет-соединение недоступно, а также вы можете прочитать существующее сообщение – Pratik

+0

Ваше решение работает как шарм! Спасибо за помощь. Я реализовал базу данных для сообщений. Теперь каждый раз, когда вы входите в действие, старые сообщения загружаются из базы данных SQL! Спасибо чувак! –

 Смежные вопросы

  • Нет связанных вопросов^_^