使用Http协议访问网络—使用HttpURLConnection

来源:互联网 发布:zepto.js 滑动不流 编辑:程序博客网 时间:2024/06/05 04:07
public class MainActivity extends Activity {public static final int SHOW_RESPONSE=0;private Button btn;private TextView tv;private Handler handler=new Handler(){@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case SHOW_RESPONSE:String response=(String) msg.obj;tv.setText(response);}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv=(TextView) findViewById(R.id.tv);btn=(Button) findViewById(R.id.btn);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {sendRequestWithHttpURLConnection();sendRequestWithHttpClient();}});}private void sendRequestWithHttpClient(){new Thread(new Runnable() {@Overridepublic void run() {}}).start();}private void sendRequestWithHttpURLConnection(){//开启线程来发起网络请求new Thread(new Runnable() {@Overridepublic void run() {HttpURLConnection connection=null;try {URL url=new URL("http://www.baidu.com");connection=(HttpURLConnection)url.openConnection();connection.setRequestMethod("GET");connection.setConnectTimeout(8000);connection.setReadTimeout(8000);InputStream in=connection.getInputStream();//下面对获取到的输入流进行读取BufferedReader reader=new BufferedReader(new InputStreamReader(in));StringBuilder response=new StringBuilder();String line;while((line=reader.readLine())!=null){response.append(line);}Message message=new Message();message.what=SHOW_RESPONSE;//将服务器返回的结果存放到Message中message.obj=response.toString();handler.sendMessage(message);} catch (Exception e) {e.printStackTrace();}finally{if (connection!=null) {connection.disconnect();}}}}).start();}}

需要权限

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

在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择。

而在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。对于新的应用程序应该更加偏向于使用HttpURLConnection,因为在以后的工作当中我们也会将更多的时间放在优化HttpURLConnection上面。

但同时也由于HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前Android团队在提升和优化HttpClient方面的工作态度并不积极。

0 0