Did you add <uses-permission
android:name="android.permission.INTERNET" /> tag to your
AndroidManifest.xml?
The new SDK requires that permission for network calls.

sacoskun

On Aug 21, 6:13 pm, Graeme <[EMAIL PROTECTED]> wrote:
> Hi everyone
>
> I'm trying to figure out how to use HttpClient 4.x to do POST requests
> routed via
> a Proxy server. I'm seeing a socket exception triggered by calling
>
> DefaultHttpClient.execute(HttpHost target, HttpRequest method). My
> HttpPoster class looks like
>
> package com.bt.gcto.android.testhttp;
>
> import java.io.IOException;
> import java.util.Hashtable;
>
> import org.apache.http.Header;
> import org.apache.http.HttpEntity;
> import org.apache.http.HttpHost;
> import org.apache.http.HttpResponse;
> import org.apache.http.HttpVersion;
> import org.apache.http.client.HttpClient;
> import org.apache.http.client.methods.HttpPost;
> import org.apache.http.conn.ClientConnectionManager;
> import org.apache.http.conn.params.ConnRoutePNames;
> import org.apache.http.conn.scheme.PlainSocketFactory;
> import org.apache.http.conn.scheme.Scheme;
> import org.apache.http.conn.scheme.SchemeRegistry;
> import org.apache.http.conn.scheme.SocketFactory;
> import org.apache.http.conn.ssl.SSLSocketFactory;
> import org.apache.http.impl.client.DefaultHttpClient;
> import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
> import org.apache.http.params.BasicHttpParams;
> import org.apache.http.params.HttpParams;
> import org.apache.http.params.HttpProtocolParams;
> import org.apache.http.util.EntityUtils;
>
> import android.net.Uri;
> import android.util.Log;
>
> public class HttpPoster {
>        private final String TAG="HttpPoster";
>            private final String NETWORK_DEVICE_SIDE_TRUE =
> ";deviceside=true";
>            private final String NETWORK_DEVICE_SIDE_FALSE =
> ";deviceside=false";
>            private final String NETWORK_WIFI = ";interface=wifi";
>            //private final String proxy="proxy.intra.bt.com:8080";
>            private boolean useWifi;
>            private boolean deviceSide;
>            // Apache HttpClient 4.x stuff
>            private static HttpParams defaultParameters = null;
>            private static SchemeRegistry supportedSchemes = null;
>
>            /**
>              * Performs general setup.
>              * This should be called only once.
>              */
>             private final static void setup() {
>
>                 supportedSchemes = new SchemeRegistry();
>
>                 // Register the "http" and "https" protocol schemes, they are
>                 // required by the default operator to look up socket
> factories.
>                 SocketFactory sf = PlainSocketFactory.getSocketFactory();
>                 supportedSchemes.register(new Scheme("http", sf, 80));
>                 sf = SSLSocketFactory.getSocketFactory();
>                 supportedSchemes.register(new Scheme("https", sf, 80));
>
>                 // prepare parameters
>                 HttpParams params = new BasicHttpParams();
>                 HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
>                 HttpProtocolParams.setContentCharset(params, "UTF-8");
>                 HttpProtocolParams.setUseExpectContinue(params, true);
>                 defaultParameters = params;
>
>             } // setup
>
>             private final static HttpParams getParams() {
>                 return defaultParameters;
>             }
>
>            HttpPoster(boolean deviceSide, boolean useWifi) {
>                this.useWifi = useWifi;
>                this.deviceSide = deviceSide;
>                System.err.println("HttpPoster::HttpPoster");
>            }
>
>            public String post(String url,
>                                                 Hashtable<String,String> 
> headerProperties, byte[] bytes )
>               throws IOException {
>                     HttpClient client = null;
>                     HttpPost method=null;
>                 //InputStream is = null;
>                 //OutputStream os = null;
>                 //String response = "";
>                 HttpResponse rsp = null;
>                 HttpEntity entity=null;
>                 String fullUrl;
>                 //int rc;
>
>                 Log.d(TAG,"post() ---ENTER---");
>                 Log.d(TAG,"HttpPoster::post");
>                 Log.d(TAG,"http.proxyHost = " +
> System.getProperty("http.proxyHost"));
>                 Log.d(TAG,"http.proxyPort = " +
> System.getProperty("http.proxyPort"));
>                 try {
>                     fullUrl = url + (deviceSide ? NETWORK_DEVICE_SIDE_TRUE :
> NETWORK_DEVICE_SIDE_FALSE)
>                      + (useWifi ? NETWORK_WIFI : "");
>                     Uri fullUri = Uri.parse( fullUrl );
>                     String targetname = fullUri.getHost();
>                     Log.d(TAG,"HttpPoster::post -- about to open connection
> on URL = " + fullUrl);
>                     //
>                     // setup proxy server
>                     //
>                         final HttpHost target = new HttpHost(targetname, 80,
> "http");
>                         final HttpHost proxy  = new 
> HttpHost("proxy.mycompany.com",
> 8080, "http");
>
>                         setup() ; // Some general setup
>                         client = new DefaultHttpClient() ;
>
> client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
>
>                         method = new HttpPost( fullUrl );
>                         Log.d(TAG,"Executing request to " + target + " via " +
> proxy);
>                         rsp = client.execute(target, method);
>                         entity = rsp.getEntity();
>
>                         
> Log.d(TAG,"---------------------------------------------");
>                         Log.d(TAG, rsp.getStatusLine().toString() );
>                         Header [] headers = rsp.getAllHeaders();
>                         for (int i=0; i<headers.length; i++) {
>                                 Log.d(TAG,"\t" + headers[i] );
>                         }
>                         
> Log.d(TAG,"---------------------------------------------");
>
>                         if (rsp.getEntity() != null) {
>                                 Log.d(TAG, EntityUtils.toString( 
> rsp.getEntity() ) );
>                         }
>                 } finally {
>                         if (entity != null)
>                                 entity.consumeContent(); // release 
> connection gracefully
>                 }
>                 // return response;
>                 Log.d(TAG,"post() ---EXIT---");
>                 return new String("");
>             }
>
>            private final static HttpClient createHttpClient() {
>
>                 ClientConnectionManager ccm =
>                     new ThreadSafeClientConnManager(getParams(),
> supportedSchemes);
>                 //  new SingleClientConnManager(getParams(),
> supportedSchemes);
>
>                 DefaultHttpClient dhc =
>                     new DefaultHttpClient(ccm, getParams());
>
>                 return dhc;
>             }
>
>         }
>
> My TestHttp application launches an Activity TestHttp::onCreate()
> method  whose DDMS logcat output is
>
> 08-21 14:25:54.189: DEBUG/TestHttp(238): onCreate()---enter---
> 08-21 14:25:54.248: DEBUG/TestHttp(238): httpClient is non-null
> 08-21 14:25:54.398: DEBUG/TestHttp(238): in catch {} response is null
> 08-21 14:25:54.418: ERROR/TestHttp(238): Error
> 08-21 14:25:54.418: ERROR/TestHttp(238): java.net.SocketException:
> unknown error
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> org.apache.harmony.luni.platform.OSNetworkSystem.createSocketImpl(Native
> Method)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> org.apache.harmony.luni.platform.OSNetworkSystem.createSocket(OSNetworkSystem.java:
> 79)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> org.apache.harmony.luni.net.PlainSocketImpl2.create(PlainSocketImpl2.java:
> 59)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> java.net.Socket.checkClosedAndCreate(Socket.java:763)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> java.net.Socket.connect(Socket.java:910)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:
> 117)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:
> 129)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:
> 164)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:
> 119)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:
> 348)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:
> 555)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:
> 509)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> com.bt.gcto.android.testhttp.HttpPoster.post(HttpPoster.java:115)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> com.bt.gcto.android.testhttp.TestHttp.onCreate(TestHttp.java:42)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:
> 1121)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:
> 2094)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:
> 2147)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> android.app.ActivityThread.access$1800(ActivityThread.java:112)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1572)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> android.os.Handler.dispatchMessage(Handler.java:88)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> android.os.Looper.loop(Looper.java:123)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> android.app.ActivityThread.main(ActivityThread.java:3708)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> java.lang.reflect.Method.invokeNative(Native Method)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> java.lang.reflect.Method.invoke(Method.java:492)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> com.android.internal.os.ZygoteInit
> $MethodAndArgsCaller.run(ZygoteInit.java:734)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:492)
> 08-21 14:25:54.418: ERROR/TestHttp(238):     at
> dalvik.system.NativeStart.main(Native Method)
> 08-21 14:25:54.449: DEBUG/TestHttp(238): onCreate()---exit----
>
> The TestHtpp Activity exercises HttpPoster::post() within its
> onCreate() method, thus
>
> public class TestHttp extends Activity {
>         private static final String TAG="TestHttp";
>         private DefaultHttpClient httpClient = null;
>         private final Uri galleryServerUri= Uri.parse("http://my-gallery-
> server/gallery2/main.php");
>         private final String uname = "graeme";
>         private final String pwd = "123456";
>
>     /** Called when the activity is first created. */
>     @Override
>     public void onCreate(Bundle icicle) {
>         Log.d(TAG,"onCreate()---enter---");
>         super.onCreate(icicle);
>         setContentView(R.layout.main);
>         try {
>                 HttpPoster poster = new HttpPoster(false, false) ;
>                 poster.post( galleryServerUri.toString(), null,
> null );
>         } catch (Exception e) {
>                 Log.e(TAG, "Error", e);
>         }
>         Log.d(TAG,"onCreate()---exit----");
>     }
>
> }
>
> The logcat ouput from class HttpPoster is just ...
>
> 08-21 14:25:54.257: DEBUG/HttpPoster(238): post() ---ENTER---
> 08-21 14:25:54.257: DEBUG/HttpPoster(238): HttpPoster::post
> 08-21 14:25:54.257: DEBUG/HttpPoster(238): http.proxyHost = null
> 08-21 14:25:54.257: DEBUG/HttpPoster(238): http.proxyPort = null
> 08-21 14:25:54.269: DEBUG/HttpPoster(238): HttpPoster::post -- about
> to open connection on URL 
> =http://my-gallery-server/gallery2/main.php;deviceside=false
> 08-21 14:25:54.289: DEBUG/HttpPoster(238): Executing request 
> tohttp://my-gallery-server:80viahttp://proxy.mycompany.com:8080
>
> I am running Android SDK-0.9 on and Windows XP SP2 devel machine.
> Do I need to take any special; steps to enable the emulator to open
> network
> (socket) connections ?
>
> Thanks for any help.
> Graeme
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
Announcing the new Android 0.9 SDK beta!
http://android-developers.blogspot.com/2008/08/announcing-beta-release-of-android-sdk.html
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to