3

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

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

  1. 如何检查我是否有 Internet 连接?

来自 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();     
4

3 回答 3

2
  1. 当我获得互联网连接时,在本地缓存 JASON 字符串并在途中发送它们的最佳方法是什么。

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

如何检查我是否有 Internet 连接?

使用android.net.conn.CONNECTIVITY_CHANGE广播:用于在 Android 应用中检查互联网连接的广播接收器

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

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

于 2014-02-28T13:25:22.597 回答
0

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

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

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

于 2014-02-28T13:25:05.197 回答
0

我正在尝试为此分享简单的解决方案:

  • 使用键/值对 Reservoir lib轻松序列化对象并将其缓存到磁盘
  • 尝试使用这个很棒的 AP​​JQ库,它可以一次性处理您的所有需求,单击此处查看我的简化示例。
于 2015-01-02T10:13:50.230 回答