1

私のアプリでは、Web サーバーにアクセスできます。一部の携帯電話では問題なく動作しますが、Samsung Galaxy Model No - GT-S5830i Android Version - 2.3.6 でのテスト中に、不明なホスト例外が表示され続けます。ブラウザからのURLが正常に機能していることを確認しました。

private void submitUploadData(String url ,Map<String, String> param) throws IOException 
{  
    URL siteUrl;
    try {
        siteUrl = new URL(url); 
    HttpURLConnection conn = (HttpURLConnection) siteUrl.openConnection();
    conn.setRequestMethod("POST");
    conn.setDoOutput(true);
    conn.setDoInput(true);

    DataOutputStream out = new DataOutputStream(conn.getOutputStream());

    Set getkey = param.keySet();
    Iterator keyIter = getkey.iterator();
    String content = "";
    for(int i=0; keyIter.hasNext(); i++) {
        Object key = keyIter.next();
        if(i!=0) {
            content += "&";
        }
        content += key + "=" +  param.get(key);
    } 
    out.writeBytes(content.trim()); 
    out.flush();
    out.close();
    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    String line = "";
    while((line=in.readLine())!=null) {
        System.out.println(line);
    }
    in.close();  
    //Intent home = new Intent(SyncHttp.this,TimeAndExpensesSKActivity.class);
    //startActivity(home);
    db.updateTimeExported(1);
    db.updateExpensesExported(1);
    db.close();
    db.close(); 

    if(db.getLogCount()==0){ 
            db.insertSyncDateDetails(getDateandTime());}
            else{
            db.updateSyncDateDetails(1, getDateandTime());}  


    } catch (MalformedURLException e) { 
        e.printStackTrace();
    }
    this.setResult(FINISH_RESULT);
    db.close();
}

すでに権限を追加しました

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.CAMERA" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

なぜこの例外が発生するのか、私は本当に混乱しています。

助けてくれてありがとう。

4

4 に答える 4

1

また、Samsung Galaxy TABでURLConnections、特にHTTPSを使用する際にいくつかの問題が発生しましたが、同じ名前で異なる市場やモバイルプロバイダー向けに作成されたデバイスが多数あるため、おそらく他のモデルでも発生すると思います。

これまでのところ、他にもたくさんの問題があるためにURLConnectionクラスを回避する傾向があるため、申し訳ありませんが回避策を見つけることができませんでした。

APIとの通信にはApacheHTTPクライアントを使用することをお勧めします。あなたはそれを使用する例のトンをグーグルすることができます。

また、コードを見るときは、Javaのtry-catch-finallyブロックステートメントをもう少し読むことをお勧めします。最後に、またはエラーが発生した場合に、接続を適切に閉じることが非常に重要です。

その他の可能性は次のとおりです。

  1. アクティブな接続はありません(モバイルまたはwifi)

  2. 「http://www」がありません。あなたのURLで。

于 2012-06-12T13:23:24.563 に答える
1

私のアプリもこれを行いました。これは通常、不安定なネットワーク接続が原因です。私がしたことは、これをキャッチして、発生した場合に数ミリ秒のスリープ後にURLを再フェッチしようとUnknownHostExceptionする方法でコードを変更することでした。UnknownHostException

基本的なアルゴリズムは次のようなものです。

private void submitUploadData(String url ,Map<String, String> param) throws IOException 
{  
    URL siteUrl;
    boolean isDataSubmitted = false;
    while(!isDataSubmitted){
        try {
            //do your complicated http process
            isDataSubmitted = true;
        } catch(UnknownHostException uhe){
            e.printStackTrace();
        } catch (MalformedURLException e) { 
            e.printStackTrace();
        }
    }
}
于 2012-06-12T13:23:31.780 に答える
0

入力を受け取る前に DataOutputStream で close() を呼び出すと、接続全体が閉じられる可能性があると思います-その行をコメントアウトしてみてください。

于 2012-06-12T13:24:33.817 に答える
-1

携帯電話のブラウザからURLを確認しましたか?関数に渡したURLをログに記録し、携帯電話のブラウザで試してください。私は、この特定の電話が許していない、欠落している/正しくないプロトコル指定子やURL文字列形成の問題について考えます。

于 2012-06-12T13:21:38.207 に答える