2016-07-24 6 views
0

Ich entwickle eine Messaging-App in Android. Wenn ich eine Nachricht sende, speichere ich die Nachricht in sqlite db mit insert(). Ich speichere es als ein Objekt, das Absender, Empfänger, Nachricht enthält.SQLitedb Implementierung für Android Messaging

Jetzt, wenn mein Fragment in onCreateView() erstellt wird, stelle ich es unter Verwendung get wieder her. Das Problem ist, ich weiß nicht, wie das get für mein Beispiel zu implementieren. Hier ist mein Code.

In meinem Fragment,

public void sendTextMessage(View v) { 
     String message = msg_edittext.getEditableText().toString(); 
     ChatMessage chatMessage = new ChatMessage(message,true); 
     chatMessage.body = message; 
     Log.d("hi","Inside3"); 
      localstoragehandler.insert("me", "receiver", chatMessage.body.toString()); 
      msg_edittext.setText(""); 
      chatAdapter.add(chatMessage); 
      chatAdapter.notifyDataSetChanged(); 
     } 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
    localstoragehandler = new LocalStorageHandler(getActivity()); 
    dbCursor = localstoragehandler.get("receiver", "me"); 
     Log.d("hi","Store0"); 
     if (dbCursor.getCount() > 0){ 
      Log.d("hi","Store1"); 
      int noOfScorer = 0; 
      dbCursor.moveToFirst(); 
      while ((!dbCursor.isAfterLast())&&noOfScorer<dbCursor.getCount()) 
      { 
       Log.d("hi","Store2" + dbCursor.getString(3)); 
       noOfScorer++; 
       chatAdapter.addmsg(dbCursor.getString(3)); 
       dbCursor.moveToNext(); 
      } 
     } 
     localstoragehandler.close(); 
    } 

Als mein Fragment schickte ich nur erstellt wird, um die letzte Meldung. Das bedeutet - Zum Beispiel habe ich geschickt -

Hi 
How 
Are 
You 

Wenn das Fragment erstellt wird, ich es als -

You 
    You 
    You 
    You 

Hier ist meine chatAdapter Methode -

public void add(ChatMessage object) { 
     chatMessageList.add(object); 
     notifyDataSetChanged(); 
    } 

    public void addmsg(ChatMessage msg) { 
     Log.d("hi","Store3" + msg); 
     chatMessageList.add(msg); 
     Log.d("hi","Store4" + chatMessageList); 
     notifyDataSetChanged(); 
     chatMessageList.clear(); 
    } 

Antwort

0

Haben Sie versucht, Rufen Sie ChatMessage chatMessage = new ChatMessage(message,true); außerhalb der Funktion? Neue Instanz erstellen kann helfen, wie es mir zuvor geholfen hat!

ChatMessage chatmessage; 
public void sendTextMessage(View v) { 
chatmessage = new Chatmessage(....) 
//..... 
} 
0

Ein einfaches, aber schlampig fix wäre die while-Schleife zu entfernen und nur das erste Ergebnis zu sehen bekommen, wie Sie das richtige Ergebnis mehrfach sind abruft. Ich kann dir nicht weiter helfen, ohne zu sehen, was dein "get" -Methode tatsächlich macht.

Verwandte Themen