如何在android上的服务器上传唯一的消息数据

时间:2016-11-25 07:04:50

标签: android sharedpreferences android-sqlite android-volley

我正在尝试从我的Android app.it上传一些消息数据到服务器上传好服务器数据,但问题是,每次应用程序启动时都会上传所有消息数据。我只想上传那些消息以前不会上传的数据。如何做?

以下是我在服务器上获取和上传消息数据的代码:

getBBox

如果有人想了解更多信息,请询问。

3 个答案:

答案 0 :(得分:1)

column中再创建一个table并存储数据,例如是否已上传。并上传未上传的数据。

答案 1 :(得分:1)

将最近收到的消息日期保存在SharedPreferences中,并在query中设置条件,以便选择在该日期之后收到的消息。

String dateFromSharedPreferences="2000-01-01"; 
try{ 
String dateFromSharedPreferences=getActivity().getPreferences(Context.MODE_PRIVATE); 
dateFromSharedPreferences=sharedPref.getString("LastMsgDate", "2000-01-01"); 
catch(Exception ex){}
Cursor cursor = cr.query(uri, projection, "(body"+" LIKE '%"+smsBuilder1+"%'or+" + "body"+" LIKE '%"+smsBuilder2+"%') and date>'"+dateFromSharedPreferences+"'", null, "date desc");

请勿忘记将当前上次收到的短信日期保存在同一SharedPreferences

    while (cursor.moveToNext() && i++ < 20) {
        if(i==1) saveDateToSharedPreferences(cursor.getString(cursor.getColumnIndex("date")))
        //other codes here

    }

saveDateToSharedPreferences函数将如下

    function saveDateToSharedPreferences(String LastMsgDate){
        SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString("LastMsgDate", LastMsgDate);
        editor.commit();
    }

答案 2 :(得分:1)

所以,你在这里处理的是本地缓存,请注意,这个答案将为你提供一种处理它的方法,编码取决于你,你发布的代码似乎取决于你任务,这是你的选择:

  1. SharedPreferences
  2. Android的内置sqlite。
  3. SharedPreferences是一个选项,但是 - 它更适合单个变量,或者例如,序列化为JSON字符串的对象。

    在您的情况下,创建和维护本地(在电话本身,客户端)数据库可能会更好 - 因为您正在维护一个消息记录,这个记录很大,可能达到数十个数字,你提到过你不是在创建一个自定义表 - 你应该,并且由于你的代码表明那里有一个db,这通常是我会这样做的:

    1. 创建一个新表,包含所有已知值以及2个新列(例如is_sent,is_received)。
    2. 想到两种情况:发送消息,收到消息 - 你可能已发送它,另一方(服务器)可能无法获取它。
    3. 使用光标拉出消息(就像你一样),将它们保存在ArrayList中,并将它们的信息保存在新表中,在发送和接收列上将它们全部标记为false。
    4. 将该列表发送到您的服务器(在表中将所有列表标记为sent = true)。
    5. 确保您的服务器响应返回一个确认(每个id,或者只是一般的“success:true”),然后在onResponse回调中 - 更新您的表(如果需要,使用本地列表进行id比较,标记与received = true相关的内容。
    6. 修改在启动时发送内容以拉取消息的方法,然后首先将它们与您的表进行比较,只发送标记为sent = false&amp;&amp;的msgs。 received = false,如果有疑问 - 检查id,如果它不在你的表中 - 你不知道它,所以发送它并确保你的服务器知道比较msg id与用户id的交叉引用以避免重复。
    7. 所有这些都需要客户端工作和服务器端工作,并且可能需要来自服务器端/数据库人员的一些帮助,并且再次 - 这可能是类似于聊天消息缓存的流程,并且可能会大大调整为效率编码时。

      希望这有助于。