28

画像をサーバーにアップロードし、実行中にAndroidでデータベースをサーバーに更新するアプリケーションを作成していますが、エラーが表示されます

Connection to http://localhost refused 

さらに多くのエラーが発生したため、この問題を調査したところ、URL 接続を提供する代わりに見つかりました

http://localhost/... provide the link as http://10.0.2.2/... 

私はそうしましたが、問題は同じですが、より多くのエラーがここにあります:

E/org.apache.http.conn.HttpHostConnectException(4318): Connection to http://localhost refused
E/org.apache.http.conn.HttpHostConnectException(4318): org.apache.http.conn.HttpHostConnectException: Connection to http://localhost refused
E/org.apache.http.conn.HttpHostConnectException(4318):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183)
E/org.apache.http.conn.HttpHostConnectException(4318):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
E/org.apache.http.conn.HttpHostConnectException(4318):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
E/org.apache.http.conn.HttpHostConnectException(4318):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
E/org.apache.http.conn.HttpHostConnectException(4318):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
E/org.apache.http.conn.HttpHostConnectException(4318):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
E/org.apache.http.conn.HttpHostConnectException(4318):  at com.example.android.photobyintent.ViewRecipients.uploadFile(ViewRecipients.java:325)
E/org.apache.http.conn.HttpHostConnectException(4318):  at com.example.android.photobyintent.ViewRecipients$1.run(ViewRecipients.java:238)
E/org.apache.http.conn.HttpHostConnectException(4318):  at java.lang.Thread.run(Thread.java:856)
E/org.apache.http.conn.HttpHostConnectException(4318): Caused by: java.net.ConnectException: failed to connect to /127.0.0.1 (port 80): connect failed: ECONNREFUSED (Connection refused)
E/org.apache.http.conn.HttpHostConnectException(4318):  at libcore.io.IoBridge.connect(IoBridge.java:114)
E/org.apache.http.conn.HttpHostConnectException(4318):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
E/org.apache.http.conn.HttpHostConnectException(4318):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
E/org.apache.http.conn.HttpHostConnectException(4318):  at java.net.Socket.connect(Socket.java:842)
E/org.apache.http.conn.HttpHostConnectException(4318):  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
E/org.apache.http.conn.HttpHostConnectException(4318):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
E/org.apache.http.conn.HttpHostConnectException(4318):  ... 8 more
E/org.apache.http.conn.HttpHostConnectException(4318): Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
E/org.apache.http.conn.HttpHostConnectException(4318):  at libcore.io.Posix.connect(Native Method)
E/org.apache.http.conn.HttpHostConnectException(4318):  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
E/org.apache.http.conn.HttpHostConnectException(4318):  at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
E/org.apache.http.conn.HttpHostConnectException(4318):  at libcore.io.IoBridge.connect(IoBridge.java:112)
E/org.apache.http.conn.HttpHostConnectException(4318):  ... 13 more

ファイルアップロードのコードは次のとおりです。

public int uploadFile(ArrayList<String> sourceFileUri, String info, String latitude, String longitude, String id) throws IOException {
        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpContext localContext = new BasicHttpContext();
            HttpPost httpPost = new HttpPost("http://10.0.2.2/deliverysystem/order/add");

            MultipartEntity entity = new MultipartEntity(
                    HttpMultipartMode.BROWSER_COMPATIBLE);

            entity.addPart("returnformat", new StringBody("json"));
            System.out.println(sourceFileUri.size());
            for(int i=0;i<sourceFileUri.size();i++){
                String sourceFile = sourceFileUri.get(i);
                entity.addPart("uploaded_file"+(i+1), new FileBody(new File(sourceFile)));
            }

            entity.addPart("fld_delivery_id", new StringBody(id));
            entity.addPart("fld_delivery_location", new StringBody(info));
            entity.addPart("fld_latitude", new StringBody(latitude));
            entity.addPart("fld_longitude", new StringBody(longitude));
            httpPost.setEntity(entity);
            HttpResponse response = httpClient.execute(httpPost, localContext);
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(
                            response.getEntity().getContent(), "UTF-8"));

            String sResponse = reader.readLine();
            return 1;
        } catch (Exception e) {
            if (dialog.isShowing())
                dialog.dismiss();

            Log.e(e.getClass().getName(), e.getMessage(), e);
            return 1;
        }

       }

コードのデバッグ中は、次のようになります。

httpPost.setEntity(entity);

この行の後、つまり次のステートメントで例外が表示されます。

HttpResponse response = httpClient.execute(httpPost, localContext);

誰でもこれについて私を助けることができますか?

4

13 に答える 13

23

エミュレーターを使用してローカル サーバー用のアプリを実行している場合。ipローカルに言及10.0.2.2し、アプリにインターネット許可を与える必要があります:

<uses-permission  android:name="android.permission.INTERNET" />
于 2013-03-30T17:40:05.540 に答える
7
http://localhost

上記のホストは、コードを実行しているエミュレーターによって既に占有されています。コンピューターのローカル ホストにアクセスする場合は、IP アドレスを として使用しますhttp://10.0.2.2:8080/

詳細については、このリンクを参照してください。

于 2012-12-31T08:35:00.133 に答える
3

上記の localhost を 10.0.2.2:8080 に変更するという回答に加えて、マニフェストのアプリケーション タグの外側にアクセス許可を追加してみてください。

于 2012-12-31T10:58:02.840 に答える
3

10.0.2.2 ローカルホストなどのワンプサーバーの使用10.0.2.2/phpMyAdmin

そしてTomcat用10.0.2.2:8080/server

于 2013-10-03T10:07:33.887 に答える
2

デバイスでテストするときは、PC の IP アドレスを追加します。

PCでcmdで実行Ipconfig

Ubuntu実行ターミナルでifconfig

次に、使用する"http://your_pc_ip_address:8080/register"代わりに使用します"http://10.0.2.2:8080/register"

in my pc = 192.168.1.3

また、マニフェストにインターネット許可を追加します

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
于 2015-05-03T02:53:24.927 に答える
1

Web サービスと Android 4.x に PHP を使用しています。Web サービスに接続するためのデバイス。10.0.2.2エミュレータではうまく機能しましたが、デバイスからの接続に失敗したという同様の問題がありました。私にとってうまくいった解決策は次のとおりです。コンピューターのIPを192.168.0.103見つける... Apacheのポートを見つけると言う...と言う8080今度はhttpd.confを開いて次の行を見つけますリッスン127.0.0.1:8080この行の後に次のリッスンを追加192.168.0.103:8080します。192.168.0.103:8080Androidコードで使用すると、接続されます!!

于 2014-02-20T09:31:18.480 に答える
0

同様の問題がありましたが、スマートフォンでwifiが接続されていないことがわかりました。Wi-Fi をオンにして (ラップトップで) 同様のネットワークに接続した後、別の問題が発生しました。ラップトップのファイアウォールが着信接続をブロックしていました。ファイアウォールを修正すると、Android アプリからラップトップで実行されている Web サービスと通信できるようになりました。

于 2015-06-02T06:44:16.640 に答える
0

このエラーの 2 つの解決策:

1. Android プロジェクトの androidManifest.xml にこの権限を追加します。

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

2. まず、デバイスのインターネット接続をオンにします。

于 2016-07-31T06:10:56.343 に答える
-3

127.0.0.1の代わりに使用localhost

于 2014-10-05T09:19:18.180 に答える