1

サーバーに接続し、URLを使用してサーバーからxmlにアクセスするAndroidアプリを開発しました。HttpUrlConncetion を使用して接続しています。この接続コードを jar ファイルに記述し、アプリはこの jar を使用してサーバーに接続しています。エミュレーターを使用している場合、このアプリは正常に動作しますが、モバイルにこのアプリをインストールすると、例外がスローされます。

マニフェスト ファイルにインターネット アクセス許可を追加しました。

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

例外は

Connection timed out 
org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method)
dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:388)
org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:236)
org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:470)
java.net.Socket.connect(Socket.java:1055)
org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>           (HttpConnection.java:106)
org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>   (HttpConnection.java:79)org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:353)org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:120)org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection
(HttpURLConnectionImpl.java:316)org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection

(HttpURLConnectionImpl.java:298)
org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect

(HttpURLConnectionImpl.java:236)
com.tracking.jar.XmlDownLoader.openConnection(XmlDownLoader.java:46)
com.tracking.jar.XmlDownLoader.downLoadXml(XmlDownLoader.java:18)
com.tracking.jar.BusDetails.getProviderRouteBeanList

(BusDetails.java:179)
com.vehicletracking.GetProviderRouteBeanListAsyncTask.doInBackground

(GetProviderRouteBeanListAsyncTask.java:17)
com.vehicletracking.GetProviderRouteBeanListAsyncTask.doInBackground

(GetProviderRouteBeanListAsyncTask.java:1)
android.os.AsyncTask$2.call(AsyncTask.java:216)
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:337)
java.util.concurrent.FutureTask.run(FutureTask.java:169)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1119)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:612)
java.lang.Thread.run(Thread.java:1052)

私の携帯電話はルート化されており、着信と発信をブロックするアプリ コール ブロッカー アプリをインストールしています。

私の接続コードは次のとおりです。

public String downLoadXml(String urlString) throws Exception{
    urlString = urlString.replace(" ", "%20");
    String xfStr = "";
    HttpURLConnection httpConn = null;
    try{
        httpConn = openConnection(urlString);
        InputStream in = httpConn.getInputStream();
        InputStreamReader isr = new InputStreamReader(in);
        BufferedReader br = new BufferedReader(isr);
        String str =null;

        while((str = br.readLine())!= null){
            xfStr = xfStr + str;
        }
    }catch(Exception e){
        throw e;
    }
    finally{
        if(httpConn!=null){
            httpConn.disconnect();
        }
    }
    return xfStr;
}

private HttpURLConnection openConnection(String urlString) throws IOException{
    URL url  = new URL(urlString);
    HttpURLConnection httpConn = null;
    httpConn = (HttpURLConnection) url.openConnection();
    httpConn.setAllowUserInteraction(false);
    httpConn.setInstanceFollowRedirects(false);
    httpConn.setRequestMethod("GET");
    httpConn.setConnectTimeout(60000);
    httpConn.connect();
    return httpConn;
}
4

2 に答える 2

1

天才はこれを試して、

try {
                HttpParams httpParams = new BasicHttpParams();
                int timeoutConnection = 3000;
                int socketTimeoutConnection = 5000;
                HttpConnectionParams.setConnectionTimeout(httpParams,
                        timeoutConnection);
                HttpConnectionParams.setSoTimeout(httpParams,
                        socketTimeoutConnection);
                DefaultHttpClient client = new DefaultHttpClient();
                client.setParams(httpParams);
                HttpGet httpGet = new HttpGet(postedScholarshipUrl);
                HttpResponse httpResponse = client.execute(httpGet);
                StatusLine statusLine = httpResponse.getStatusLine();
                 int statusCode = statusLine.getStatusCode();
                if (statusCode == 200) {
                    ResponseHandler<String> response = new BasicResponseHandler();
                    serverStr = client.execute(httpGet, response);
                    int myArray = new JSONArray(serverStr);
                    arrayLength = myArray.length();
                } else {
                    showDialog(connectionDown);
                }

            } catch (SocketTimeoutException bug) {
                Toast.makeText(getApplicationContext(), "Socket Timeout", Toast.LENGTH_LONG).show();
            } catch (ConnectTimeoutException bug) {
                Toast.makeText(getApplicationContext(), "Connection Timeout", Toast.LENGTH_LONG).show();
            } catch (Exception bug) {
                bug.printStackTrace();
            }
于 2014-06-17T05:32:20.263 に答える
-1

モバイルがインターネットに接続されていることを確認します。

HTTP リクエストを実行する前に、ネットワーク接続を確認する必要があります。このコードを try catch ブロックに記述します。

于 2013-01-18T07:41:17.540 に答える