3

データ (JSON 文字列) を Web サーバーに POST する必要があるアプリに取り組んでいます。私は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();     
4

3 に答える 3

2
  1. JASON 文字列をローカルにキャッシュし、インターネットに接続したときに途中で送信する最良の方法は何でしょうか。

それらをDBに置くことができますが、実際にはローカルアプリファイルに保存します。このファイルへのパスはSharedPreferencesに保存できます。

インターネットに接続しているかどうかを確認するにはどうすればよいですか?

ブロードキャストを使用するandroid.net.conn.CONNECTIVITY_CHANGE: Android アプリでインターネット接続を確認するためのブロードキャスト レシーバー

このブロードキャストレシーバー内で、サーバーに送信するものがあるかどうかをDBまたはローカルファイルで確認できます。

アプリがバックグラウンドに置かれた場合でも接続が戻る可能性があることに注意してください。これは、Android がアプリを強制終了する可能性があるときです。ブロードキャスト (マニフェストに配置されている場合) は、アプリを復活させ、json データを再送信できるようにします。

于 2014-02-28T13:25:22.597 に答える
0

これに対する簡単な解決策を共有しようとしています:

于 2015-01-02T10:13:50.230 に答える
0

インターネット接続があるかどうかを確認するには、これを使用します: https://stackoverflow.com/a/4239019/2343384

そして、5〜10秒後にループしてインターネット接続があるかどうかを確認する別のスレッドで送信を行うだけです。true の場合は、JSON 文字列を送信します。

ここに示すように、SharredPreferences にローカルに保存できる JSON 文字列: https://stackoverflow.com/a/22048041/2343384

于 2014-02-28T13:25:05.197 に答える