原生网络连接方式
来源:互联网 发布:影视播放软件 编辑:程序博客网 时间:2024/05/22 07:06
1.使用HttpURLConnection使用get方法实现获取网络图片
public class MainActivity extends Activity {static ImageView iv;static MainActivity ma;static Handler handler = new Handler(){//此方法在主线程中调用,可以用来刷新uipublic void handleMessage(android.os.Message msg) {//处理消息时,需要知道到底是成功的消息,还是失败的消息switch (msg.what) {case 1://把位图对象显示至imageviewiv.setImageBitmap((Bitmap)msg.obj);break;case 0:Toast.makeText(ma, "请求失败", 0).show();break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv = (ImageView) findViewById(R.id.iv);ma = this;}public void click(View v){Thread t = new Thread(){@Overridepublic void run() {//下载图片//1.确定网址String path = "http://xxxxxxxx/aa.jpg";try {//2.把网址封装成一个url对象URL url = new URL(path);//3.获取客户端和服务器的连接对象,此时还没有建立连接HttpURLConnection conn = (HttpURLConnection) url.openConnection();//4.对连接对象进行初始化//设置请求方法,注意大写conn.setRequestMethod("GET");//设置连接超时conn.setConnectTimeout(5000);//设置读取超时conn.setReadTimeout(5000);//5.发送请求,与服务器建立连接conn.connect();//如果响应码为200,说明请求成功if(conn.getResponseCode() == 200){//获取服务器响应头中的流,流里的数据就是客户端请求的数据InputStream is = conn.getInputStream();//读取出流里的数据,并构造成位图对象Bitmap bm = BitmapFactory.decodeStream(is);//ImageView iv = (ImageView) findViewById(R.id.iv);////把位图对象显示至imageview//iv.setImageBitmap(bm);Message msg = new Message();//消息对象可以携带数据msg.obj = bm;msg.what = 1;//把消息发送至主线程的消息队列handler.sendMessage(msg);}else{//Toast.makeText(MainActivity.this, "请求失败", 0).show();Message msg = handler.obtainMessage();msg.what = 0;handler.sendMessage(msg);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}};t.start();}}HttpURLConnection实现post方法,核心代码
Thread t = new Thread(){@Overridepublic void run() {//提交的数据需要经过url编码,英文和数字编码后不变@SuppressWarnings("deprecation")String path = "http://xxxxx/LoginServlet";try {URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("POST");conn.setConnectTimeout(5000);conn.setReadTimeout(5000);//拼接出要提交的数据的字符串String data = "name=" + URLEncoder.encode(name) + "&pass=" + pass;//添加post请求的两行属性conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");conn.setRequestProperty("Content-Length", data.length() + "");//设置打开输出流conn.setDoOutput(true);//拿到输出流OutputStream os = conn.getOutputStream();//使用输出流往服务器提交数据os.write(data.getBytes());if(conn.getResponseCode() == 200){InputStream is = conn.getInputStream();String text = Utils.getTextFromStream(is);Message msg = handler.obtainMessage();msg.obj = text;handler.sendMessage(msg);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}};t.start();
public class Utils {public static String getTextFromStream(InputStream is){byte[] b = new byte[1024];int len = 0;//创建字节数组输出流,读取输入流的文本数据时,同步把数据写入数组输出流ByteArrayOutputStream bos = new ByteArrayOutputStream();try {while((len = is.read(b)) != -1){bos.write(b, 0, len);}//把字节数组输出流里的数据转换成字节数组String text = new String(bos.toByteArray());return text;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}
二、HttpClient框架实现
public void get(View v){ EditText et_name = (EditText) findViewById(R.id.et_name); EditText et_pass = (EditText) findViewById(R.id.et_pass); final String name = et_name.getText().toString(); final String pass = et_pass.getText().toString(); Thread t = new Thread(){ @Override public void run() { String path = "http://xxx/CheckLogin?name=" + URLEncoder.encode(name) + "&pass=" + pass; //使用httpClient框架做get方式提交 //1.创建HttpClient对象 HttpClient hc = new DefaultHttpClient(); //2.创建httpGet对象,构造方法的参数就是网址 HttpGet hg = new HttpGet(path); //3.使用客户端对象,把get请求对象发送出去 try { HttpResponse hr = hc.execute(hg); //拿到响应头中的状态行 StatusLine sl = hr.getStatusLine(); if(sl.getStatusCode() == 200){ //拿到响应头的实体 HttpEntity he = hr.getEntity(); //拿到实体中的内容,其实就是服务器返回的输入流 InputStream is = he.getContent(); String text = Utils.getTextFromStream(is); //发送消息,让主线程刷新ui显示text Message msg = handler.obtainMessage(); msg.obj = text; handler.sendMessage(msg); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; t.start(); } public void post(View v){ EditText et_name = (EditText) findViewById(R.id.et_name); EditText et_pass = (EditText) findViewById(R.id.et_pass); final String name = et_name.getText().toString(); final String pass = et_pass.getText().toString(); Thread t = new Thread(){ @Override public void run() { String path = "http://xxxt/CheckLogin"; //1.创建客户端对象 HttpClient hc = new DefaultHttpClient(); //2.创建post请求对象 HttpPost hp = new HttpPost(path); //封装form表单提交的数据 BasicNameValuePair bnvp = new BasicNameValuePair("name", name); BasicNameValuePair bnvp2 = new BasicNameValuePair("pass", pass); List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>(); //把BasicNameValuePair放入集合中 parameters.add(bnvp); parameters.add(bnvp2); try { //要提交的数据都已经在集合中了,把集合传给实体对象 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "utf-8"); //设置post请求对象的实体,其实就是把要提交的数据封装至post请求的输出流中 hp.setEntity(entity); //3.使用客户端发送post请求 HttpResponse hr = hc.execute(hp); if(hr.getStatusLine().getStatusCode() == 200){ InputStream is = hr.getEntity().getContent(); String text = Utils.getTextFromStream(is); //发送消息,让主线程刷新ui显示text Message msg = handler.obtainMessage(); msg.obj = text; handler.sendMessage(msg); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; t.start(); }
三、异步HttpClient实现,是对HttpClient的封装,将源码导入到自己的项目com文件夹下loopj文件夹
使用:
public void get(View v){ EditText et_name = (EditText) findViewById(R.id.et_name); EditText et_pass = (EditText) findViewById(R.id.et_pass); final String name = et_name.getText().toString(); final String pass = et_pass.getText().toString(); String url = "http://xxxx/CheckLogin?name=" + URLEncoder.encode(name) + "&pass=" + pass; //创建异步httpclient AsyncHttpClient ahc = new AsyncHttpClient(); //发送get请求提交数据 ahc.get(url, new MyResponseHandler()); } public void post(View v){ EditText et_name = (EditText) findViewById(R.id.et_name); EditText et_pass = (EditText) findViewById(R.id.et_pass); final String name = et_name.getText().toString(); final String pass = et_pass.getText().toString(); String url = "http://192.168.13.13/Web/servlet/CheckLogin"; //创建异步httpclient AsyncHttpClient ahc = new AsyncHttpClient(); //发送post请求提交数据 //把要提交的数据封装至RequestParams对象 RequestParams params = new RequestParams(); params.add("name", name); params.add("pass", pass); ahc.post(url, params, new MyResponseHandler()); } class MyResponseHandler extends AsyncHttpResponseHandler{ //请求服务器成功时,此方法调用@Overridepublic void onSuccess(int statusCode, Header[] headers,byte[] responseBody) {Toast.makeText(MainActivity.this, new String(responseBody), 0).show();}//请求失败此方法调用@Overridepublic void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error) {Toast.makeText(MainActivity.this, "请求失败", 0).show();} }
0 0
- 原生网络连接方式
- 虚拟机网络连接方式
- VM网络连接方式
- 虚拟机网络连接方式
- 虚拟机网络连接方式
- 虚拟机网络连接方式
- 网络连接方式
- 网络连接方式
- 虚拟机网络连接方式
- 虚拟机网络连接方式
- 虚拟机网络连接方式
- VMware网络连接方式
- VMware 网络连接方式
- vmware的网络连接方式
- 判断当前网络连接方式
- 虚拟机的网络连接方式
- vmware网络连接方式介绍
- VirtualBox中网络连接方式
- php通过system(),exec(),passthru()调用外部系统命令
- 怎么用leangoo做需求管理及规划?(产品Backlog、用户故事)
- hdoj1260【简单DP】
- response.getWriter().write()与out.print()的区别
- 笔记-基础 jquery select 选中
- 原生网络连接方式
- 两张图教你使用二三阶贝塞尔曲线
- String,StringBuffer和StringBuilder的区别和联系
- FL2440开发板LEd驱动及其应用程序
- Express细节探究(1)——app.use(express.static)
- Android4.2.2 Camer系统架构图(HAL和回调处理)
- 如何使 displaytag 导出时某些列不被导出呢?指定 定制 导出 列 导出数据
- 关于置信传播算法(Belief Propagation)的一些理解与记录
- Excel—“撤销工作表保护密码”的破解并获取原始密码