• 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中的数据。
    			
    		}
    		
    	}
    }
    

      安卓的页面如下:

  • 相关阅读:
    lambda表达式
    You can't specify target table 't_mail_marketing' for update in FROM clause
    从对象list中获取对象属性list
    枚举缓存
    Solr语法
    通过Telnet查询注册服务
    日志查询
    Maven 屏蔽静态文件
    抽奖
    随机码生成方法
  • 原文地址:https://www.cnblogs.com/Sunnor/p/4678550.html
Copyright © 2020-2023  润新知