【问题标题】:Cache data locally waiting for an internet connection in Android在本地缓存数据等待Android中的互联网连接
【发布时间】:2014-04-01 12:34:20
【问题描述】:

我正在开发一个需要将数据(JSON 字符串)发布到 Web 服务器的应用程序。我正在使用 Apache HTTP 客户端(下面的附加代码)执行此操作。当有互联网连接时,一切正常,但如果没有互联网连接,项目规范需要我在本地缓存数据并等到我与服务器建立连接。

这是我的问题: 1. 什么是在本地缓存 JSON 字符串并在我获得互联网连接时发送它们的最佳方式。我能想到的唯一方法是将它们存储在数据库中,直到找到与服务器的连接。

  1. 如何检查我是否有互联网连接?

来自 POST 的代码在这里,如果我必须捕获数据,我假设我将不得不这样做来代替异常句柄中的“无连接”错误对话框。

Thread t = new Thread() 
     {  

         public void run() 
            {
                Looper.prepare(); //For Preparing Message Pool for the child Thread
                HttpClient client = new DefaultHttpClient();
                HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
                HttpResponse response;
                try {
                        HttpPost post = new HttpPost("http:xxxxx");

                        StringEntity se = new StringEntity( flat.toString());  
                        se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                        post.setEntity(se);
                        response = client.execute(post);


                    //  /*Checking response */
                        if(response!=null){
                            InputStream in = response.getEntity().getContent(); //Get the data in the entity
                        }

                    } catch(Exception e) 
                    {
                            e.printStackTrace();
                            //createDialog("Error", "Cannot Estabilish Connection");
                            Toast.makeText(getApplicationContext(), "cannot establish concetion",Toast.LENGTH_SHORT).show();
                    }

                Looper.loop(); //Loop in the message queue
            }
        };

        t.start();     

【问题讨论】:

    标签: java android caching androidhttpclient


    【解决方案1】:
    1. 在本地缓存 JASON 字符串并在我获得 Internet 连接时发送它们的最佳方式是什么。

    你可以将它们放到数据库中,但我实际上会将它们存储在本地应用程序文件中,该文件的路径可以存储在 SharedPreferences 中。

    如何检查我是否有互联网连接?

    使用android.net.conn.CONNECTIVITY_CHANGE广播:Broadcast receiver for checking internet connection in android app

    在这个广播接收器中,你可以检查你的数据库或本地文件是否有东西要发送到服务器。

    请注意,即使您的应用被置于后台,连接也可能会恢复,而此时 android 可能会杀死您的应用。广播(如果放在清单中)将恢复您的应用并允许重新发送任何 json 数据。

    【讨论】:

      【解决方案2】:

      要检查是否有互联网连接,请使用:https://stackoverflow.com/a/4239019/2343384

      只需在另一个线程中进行发送,该线程会在 5-10 秒后循环并检查是否有互联网连接。如果为真,则发送 JSON 字符串。

      您可以在 SharredPreferences 中本地保存 JSON 字符串,如下所示:https://stackoverflow.com/a/22048041/2343384

      【讨论】:

        【解决方案3】:

        我正在尝试分享一个简单的解决方案:

        • 使用键/值对轻松序列化对象并将其缓存到磁盘 Reservoir
        • 尝试使用这个很棒的 APJQ 库来处理你所有的 一次性要求,click here 我的简化版 示例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多