Android访问网络

  Android中访问网络用的是HttpClient的方式,即Apache提供的一个jar包。安卓中继承了改jar包,所以安卓adt中不需要专门import该jar,直接就可以使用。

以下是MainActivity.java代码:

package com.wyl.httptest2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends ActionBarActivity {
	Button btn;
	EditText et;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn = (Button)findViewById(R.id.btnId);
		MyOnclickListener l = new MyOnclickListener();
		et = (EditText)findViewById(R.id.editTextId);
		btn.setOnClickListener(l);//绑定监听器
	}

	class MyOnclickListener implements OnClickListener{
		@Override
		public void onClick(View v) {
			//原则:UI中的主线程不能够直接访问网络
			System.out.println("====线程名:"+Thread.currentThread().getName());
			getInternetThread myThread = new getInternetThread();
			myThread.start();

		}

	}

	class getInternetThread extends Thread{
		String line = "我是空";
		@Override
		public void run() {

			System.out.println("线程名:"+Thread.currentThread().getName());
			//获取EditText 控件里的 uri
			String uri = et.getText().toString();
			System.out.println("uri的值:"+uri);
			//访问网络
			//获取客户端对象
			HttpClient client = new DefaultHttpClient();
			//获取请求对象,并传入uri
			HttpGet get = new HttpGet(uri);
			//客户端发送请求对象
			try {
				HttpResponse resp = client.execute(get);
				//获取状态码,如果是200说明成功
				int code = resp.getStatusLine().getStatusCode();
				if(code == 200){
					//获得返回值
					InputStream in = resp.getEntity().getContent();
					BufferedReader reader = new BufferedReader(new InputStreamReader(in));
					line = reader.readLine();
				}
			} catch (ClientProtocolException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			et.setText(line);//设置EditText的值,这个地方会导致程序的崩溃,猜测是workThread不能够直接修改主线程即安卓UI中的数据。

		}

	}
}

  安卓的页面如下:

时间: 2024-12-05 07:43:41

Android访问网络的相关文章

Android访问网络(可以正常使用)

以下是MainActiviy.java,有必要的注释,里面用到了handler,以及线程,workThread如何更新mainThread才能够更新的内容. package com.wyl.httptest2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.

[转]Android访问网络,使用HttpURLConnection还是HttpClient

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12452307 最近在研究Volley框架的源码,发现它在HTTP请求的使用上比较有意思,在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient.我也比较好奇这么使用的原因,于是专门找到了一位Google的工程师写的一篇博客,文中对HttpURLConnection和HttpClient进行

Android访问网络,使用HttpURLConnection还是HttpClient?

最近在研究Volley框架的源码,发现它在HTTP请求的使用上比较有意思,在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient.我也比较好奇这么使用的原因,于是专门找到了一位Google的工程师写的一篇博客,文中对HttpURLConnection和HttpClient进行了对比,下面我就给大家简要地翻译一下. 原文地址:http://android-developers.blogspot.com/20

[转]android访问网络:java.net.ConnectException: localhost/127.0.0.1:8888 - Connection refused

这对刚学会向tomcat模拟的本地服务器发送请求的同学非常重要! 转自:http://wing123.iteye.com/blog/1873763 描述:在做注册功能的时候,向本地服务器:127.0.0.1发送注册请求,logcat显示出错信息: java.net.ConnectException: localhost/127.0.0.1:8888 - Connection refused 解决办法:弃用127.0.0.1来访问服务器,改用本机的真实IP. 问题解释:摘自:http://80x8

.Net程序员安卓学习之路2:访问网络API

做应用型的APP肯定是要和网络交互的,那么本节就来实战一把Android访问网络API,还是使用上节的DEMO: 一.准备API: 一般都采用Json作为数据交换格式,目前各种语言均能输出Json串. 假如使用PHP输出一段简单的Json,可以这么写: <?php $arr = array ('users'=>array('mady','123')); echo json_encode($arr); ?> 输出的Json如下: {"users":["mady

Android中访问网络时url中带有特殊字符的问题

Component Example value Also known as Protocol http scheme Authority username:[email protected]:8080   User Info username:password   Host host   Port 8080   File /directory/file?query   Path /directory/file   Query query   Ref ref fragment 一个完整的url链接

Android使用Http协议访问网络

Http协议工作原理大致可以理解为:客户端向服务器发出一条HTTP请求,服务器收到请求后返回一些数据给客户端,客户端对收到数据解析. 在Android6.0以前,Android上发送Http请求主要有两种方式:HttpURLConnection和HttpClient.其中HttpClient存在过多的API且难扩展,于是在Android6.0系统中,HttpClient被完全移除,如需使用,需导入相应文件.这里介绍最近我最近学习的HttpURLConnection的基本使用方法,然后接下来介绍一

Android主线程不能访问网络异常解决办法

从两个方面说下这个问题: 1. 不让访问网络的原因 2. 解决该问题的办法 不让访问网络的原因: 由于对于网络状况的不可预见性,很有可能在网络访问的时候造成阻塞,那么这样一来我们的主线程UI线程 就会出现假死的现象,产生很不好的用户体验.所以,默认的情况下如果直接在主线程中访问就报出了这个异常,名字是NetworkOnMainThreadException 解决该问题的办法 1. 独立线程 2. 异步线程AsyncTask 3. StrictMode修改默认的策略 1) 独立线程的办法 启动一个

android的网络访问URL

Thread visitBaiduThread = new Thread(new VisitWebRunnable());     visitBaiduThread.start();     try {         visitBaiduThread.join();               System.out.println("xiancheng======");         } catch (InterruptedException e) {         // TOD