Android GCM消息活动 - 在活动开始时重新加载

问题描述:

我正在编写一个包含GCM的应用程序。我不想与Whatsapp竞争。它应该只是所有使用此应用程序的人之间的一种公告板。Android GCM消息活动 - 在活动开始时重新加载

使用按钮菜单打开应用程序,其中一个将用户指向消息活动。

只要你留在这个活动,消息在那里,一切都按原样运作。

但是,如果我回到菜单活动,然后再回到消息活动中,则所有消息都消失并且不显示。

我正在使用ListActivity作为消息和onCreate函数,每当它被读取时就销毁当前列表。

我的问题是,我怎样才能返回到邮件活动而不会丢失它们?我想在Whatsapp中拥有它,当你进入WhatsApp时,信息总是在那里!

我想将消息列表保存到文件中,然后在调用onCreate时读取它(或者说是最后的40-50条消息)。这是一个好的解决方案吗?有没有解决方案没有将列表保存到文件?

这里是我的一些消息活动内部代码:

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,广播接收器(GCM接收机),和的onDestroy其中addNewMessage添加新的消息到消息列表中。

感谢您的帮助!

AJ

创建信息表和用户表数据库将存储信息和用户的详细信息。

现在,每当新消息来存储在数据库中,然后当你从表中打开应用程序加载有限的消息。如果应用程序已打开并且消息先到达数据库并添加到列表对象并使您的列表视图失效。

+0

感谢您的快速响应!让我试试这个并回到你身边。但想想Whatsapp,每次你打开邮件时,它们已经在那里了。只有加载“早期消息”时,才能从远程数据库中取出它们。他们是否将当前的历史记录保存在电话的数据库中?我应该这样做吗?无论如何,我会做你的建议,我会尽快回复你! – 2014-10-31 11:27:14

+0

是的设备数据库也是whatsapp存储消息,即使他们也将图像缩略图存储在数据库中,当互联网连接不可用时,也可以读取现有消息 – Pratik 2014-10-31 11:29:39

+0

您的解决方案像一个魅力一样工作!谢谢您的帮助。我实现了一个数据库的消息。现在,每次进入活动时,都会从SQL数据库加载旧邮件!谢啦! – 2014-11-01 01:20:54