2014-10-31 177 views
0

我正在編寫一個包含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

回答

1

創建信息表和用戶表數據庫將存儲信息和用戶的詳細信息。

現在,每當新消息來存儲在數據庫中,然後當你從表中打開應用程序加載有限的消息。如果應用程序已打開並且消息先到達數據庫並添加到列表對象並使您的列表視圖失效。

+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