1

私はこのコードを使用しています:

public static MjpegInputStream read(String url) {
    HttpResponse res;
    DefaultHttpClient httpclient = new DefaultHttpClient();   
    httpclient.getCredentialsProvider().setCredentials(
            new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
            new UsernamePasswordCredentials("admin", "1234"));
    try {
        res = httpclient.execute(new HttpGet(URI.create(url)));
        return new MjpegInputStream(res.getEntity().getContent());              
    } catch (ClientProtocolException e) { Log.e("MjpegInputStream - CP", e.getMessage()); } 
    catch (IllegalArgumentException e) { Log.e("MjpegInputStream - IA", e.getMessage()); } 
    catch (IOException e) { Log.e("MjpegInputStream - IO", e.toString() + " " + e.getMessage()); } 
    return null;
}

私はIOExcetionを取得します:

04-09 17:27:52.350: E/MjpegInputStream - IO(5749): java.net.SocketException: 許可が拒否されました 許可が拒否されました

私の URL はhttp://192.168.1.113/videostream.cgiです。ブラウザに接続すると、ユーザー名とパスワードは ( admin , 1234 )になります。

私は何を間違っていますか?

アップデート:

INTERNET アクセス許可を追加したところ、次の行でアプリケーションがクラッシュしました。

res = httpclient.execute(new HttpGet(URI.create(url)));

NetworkOnMainThreadException

4

2 に答える 2

1

NetworkOnMainThreadExceptionエラーは、メインUIスレッドでネットワーク操作を実行したことが原因で発生します私は同様の問題を抱えており、それを適切に修正する方法をまだ理解していませんが、MjpegInputStreamを独自のスレッドに取り込む必要があることはわかっています。一時的な解決策は、ネットワーク操作をUIスレッドで実行できるようにすることですが、これは悪い習慣であり、出荷しないでください。

//DO NOT LEAVE THIS IN PUBLISHED CODE: http://stackoverflow.com/a/9984437/1233435
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll()
.build();
StrictMode.setThreadPolicy(policy);
//END of DO NOT LEAVE THIS IN PUBLISHED CODE
于 2012-05-10T20:40:15.843 に答える
1

追加するのを忘れていたようです

<uses-permission android:name="android.permission.INTERNET"/>

マニフェスト ファイルに。

セキュリティと権限も参照してください

于 2012-04-09T14:41:49.800 に答える