原生网络连接方式

来源:互联网 发布:影视播放软件 编辑:程序博客网 时间: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