在Android的Activity中使用HttpURLConnection連接到服務端時拋出異常,Access denied。第一個想到是權限問題。然后就嘗試將INTERNET權限加上:在Manifest中加上:
<uses-permission android:name="android.permission.INTERNET" />
還是拋異常!看異常信息,和StrictMode有關,想到和Android版本有關,然后在Activity中加上如下代碼,問題解決:
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
完整代碼:
package com.example.quhao_test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import android.annotation.TargetApi; import android.app.Activity; import android.os.Build; import android.os.Bundle; import android.os.StrictMode; import android.view.Menu; import android.widget.TextView; public class MainActivity extends Activity { @TargetApi(Build.VERSION_CODES.GINGERBREAD) @Override protected void onCreate(Bundle savedInstanceState) { System.out.println("xxxxxxxxxxxxxxx"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String strUrl = "http://146.11.24.100:9081/testcontroller/test1?arg=2222"; StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build()); URL url = null; try { url = new URL(strUrl); System.out.println(url.getPort()); HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); InputStreamReader in = new InputStreamReader(urlConn.getInputStream()); BufferedReader br = new BufferedReader(in); String result = ""; String readerLine = null; while((readerLine=br.readLine())!=null){ result += readerLine; } in.close(); urlConn.disconnect(); System.out.println("r:"+result); TextView textView = (TextView)this.findViewById(R.id.result); textView.setText(result); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
原創文章,轉載請指明出處: withiter