1

私は、xml Web サービスを使用する Android アプリを開発しています。Wi-Fi ネットワークに接続すると正常に動作しますが、3G ネットワークに接続すると失敗します (http 404 が見つかりません)。

デバイスだけで発生しているわけではありません。テストを行うために、デスクトップで main メソッドを作成すると、問題が発生します。Wifi ネットワークで接続すると動作し、3G ネットワークでは失敗します。

3gまたはwifiの場合、HttpRequestヘッダーと彼の情報は同じです。

何ができますか?助けて!!

HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 10000);
HttpConnectionParams.setSoTimeout(httpParams, 10000);       

System.setProperty("http.keepAlive", "false");
HttpClient client = new DefaultHttpClient(httpParams);
HttpGet get = new HttpGet(url);

get.addHeader("Referer", "http://rast.sample.com/sample");
get.addHeader("User-Agent","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22");
get.addHeader("Content-Type","application/x-www-form-urlencoded");
get.addHeader("X-Requested-With","XMLHttpRequest11");
get.addHeader("Accept","application/xml, text/xml, */*");
get.addHeader("Cache-Control","no-cache"); // HTTP/1.1
get.addHeader("Expires", "Sat, 26 Jul 1997 05:00:00 GMT");
get.addHeader("Connection","close");

HttpResponse resp = client.execute(get);
HttpEntity entityResp = resp.getEntity();

問題は 3G キャッシュである可能性があると思います。どうすればクリーンアップできますか?

編集: 3G では動作する場合と動作しない場合があることに気付きました。

私は次のテストを行います。デバイスが動作していないデバイスのアクセス ポイントとして動作していた場合 (動作中のデバイスの 3G ネットワークを共有)、他のデバイスも動作するようにします。

Edit2: 3G ネットワークに接続されているサイトをナビゲートすると、機能することがわかりました。それは何でしょうか?

4

1 に答える 1

0

接続がまだ確立されていないという事実により、問題が発生している可能性があります...

ここで提案されているように、接続を待つようなことを試してください: https://stackoverflow.com/a/8679706/944070

3Gでも機能します

編集:

追加のコードの後、タイムアウトを to に変更するか、3G は常に wifi よりも遅いことをお勧め1000045000ます60000!

編集 2: Wi-Fi が Androidリンクに接続されるまでの待機の詳細。

次のようにコードを変更します。

Thread t = new Thread() {
    @Override
    public void run() {
        try {
            //check if connected!
            int count = 0;
            while (!isConnected(YourActivityName.this)) {
                count++;
                //Wait to connect
                Thread.sleep(1000);  
                // log to help you understand what is going on...
                Log.w("debug", "no connection try "+ count); // ... do not forget to remove it!
                // DO NOT TRY FOR EVER!!!
                if(count > Number_of_allowed_times) {
                    break;
                }
            }
            if(isConnected(YourActivityName.this)) {
               Log.w("debug", "network connection OK! ");
               // here you can do your stuff
            } else {
               Log.w("debug", "no connection tried " + count +" times");
            }

        } catch (Exception e) {
        }
    }
};
t.start();

isConnectedリンクのようです:

public static boolean isConnected(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager)
        context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = null;
    if (connectivityManager != null) {
        networkInfo = connectivityManager.getActiveNetworkInfo();
    }

    return networkInfo == null ? false : networkInfo.getState() == NetworkInfo.State.CONNECTED;
}

BroadcastReceiverThread と wait の代わりにforを使用してandroid.net.conn.CONNECTIVITY_CHANGE、接続が確立されたときに通知を受けて、コンテンツを更新/ダウンロードすることができます。

于 2013-03-25T22:51:49.557 に答える