2015-11-07 101 views
1

我想將我的android應用程序連接到servlet。我有這個錯誤:從android連接到servlet

org.apache.http.conn.HttpHostConnectException: Connection to http://192.168.1.3:8081 refused 
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:241) 
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:172) 
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:130) 

在AndroidManifest.xml我加入這兩個許可

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

我可以從我的瀏覽器訪問http://192.168.1.3:8081/Android/Login,它工作正常。但是,如果我從我的真正的Android設備做同樣的事情,我會得到「連鎖超時」。 我已經停用了我的防火牆,但仍然是同樣的問題。

我的代碼:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (android.os.Build.VERSION.SDK_INT > 9) 
    { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
    } 
    setContentView(R.layout.login); 
    bLogin=(Button) findViewById(R.id.loginB); 
    bLogin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      StringBuilder reponseHttp=new StringBuilder(); 
      HttpClient client=new DefaultHttpClient(); 
      String from="aaa",to="bbb"; 
      try { 
       HttpGet httpGet =new HttpGet("http://192.168.1.3:8081/Android/Login?from="+from+"&to="+to); 
       HttpResponse response=client.execute(httpGet); 
       //rest of code 
      }catch (Exception e){ 
       e.printStackTrace();} 
     } 
    }); 
} 
+0

你有沒有試圖避免連接主線程,像asynctask? –

+0

不,我從主線連接,應該使用必要的asynctask嗎? – ghassen92

+0

這是推薦的方法,請從你的Logcat –

回答

0

到服務器進程的連接需要一些時間。現在,Android迫使我們使用Asynctask類並重寫doInBackground()和onPostExecute()方法。 此外,HttpClient現在已被棄用,所以我們將使用UrlConnection。 希望這篇文章有助於未來的訪問者...