URLConnection/Android Stutio中HttpClient的添加jar包方法和DoGet、DoPost的用法

网络连接操作是一种耗时操作,因此不能再UI主线程中进行网络连接操作,需要另外开启一个线程来进行网络连接操作,开启线程的方法一种的直接开启一个新的线程即 newThread(new Runable{…})另一种是使用AsyncTask方法,在该方法中的DoInBackground()方法中进行连接网络的操作,因为AsyncTask会自动开启一个线程,所以就不用重新建立一个线程,只需要创建该AsyncTask对象然后调用execute()方法就可以了。

URLConnection创建和使用

1.创建一个新的URL,然后打开连接返回一个URLConnection对象,然后将该对象得到的内容读出来,显示到一个TextView上

try {
            URL url=new URL("http://www.360.com");
            URLConnection connection=url.openConnection();//打开连接
            InputStream is=connection.getInputStream();//获取输入流
            BufferedReader br=new BufferedReader(new InputStreamReader(is));
            String line=br.readLine();
            StringBuffer buffer=new StringBuffer();//StringBuffer可以在字符串后面接上字符串使之成为连续的字符串
            while (line!=null){
                Log.d("0", line);
                buffer.append(line);
                line=br.readLine();
            }
            //子线程向主线程传递消息的方法
            Message msg=handler.obtainMessage();
            msg.what=URL_CONNECT;//设置类型,一般为一个静态的int类型值
            msg.obj=buffer.toString().trim();//将得到的信息转换为String类型,并将里面的空格删掉
            handler.sendMessage(msg);//发送消息给Handler,通过Handler对UI主线程进行操作
            br.close();
            is.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

2.子线程通过主线程传递消息是靠Handler来完成的,通过上面的sendMessage()方法将得到的Message进行解析,将得到的信息放到TextView中显示

private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case URL_CONNECT:
                    String content= (String) msg.obj.toString();
                    mTextViewConnection.setText(content);//得到的内容显示到文本中去
                    break;
                default:
                    break;
            }
        }
    };

3.最后开启一个线程,来进行网络连接的操作

//打开网络连接时一种耗时操作,UI主线程中不允许进行耗时操作,因此需要重新开始一个线程
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        urlConnection();
                    }
                }).start()

HttpClient添加client的Jar包的方法

File→Project Structure→Dependencies→右边有个“+”点击然后选择第一个Library Dependence 最后在文本框中输入org.apcahe.http点击搜索,选中第一个点击OK添加进去就可以使用httpClient了
这里写图片描述

HttpClient的DoGet方法

1.首先创建一个类HTTPDoGetAsyncTask 然后继承于AsyncTask,然后填写里面的3个参数,这三个参数分别是doInBackground和onProgressUpdate以及onPostExecute的参数列表的类型

2.然后在doInBackground中(该方法会自动创建一个新的线程进行操作)先创建一个HttpClient对象然后设置为Get方法,然后读取返回的信息

 /***
     * 尖括号内的三个参数分别传入doInBackground和onProgressUpdate以及onPostExecute的参数列表的类型
     */
    class HTTPDoGetAsyncTask extends AsyncTask<String,Integer,String>{
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
        }

        @Override
        protected String doInBackground(String... params) {
            HttpClient client=new DefaultHttpClient();
            //利用eclipse中的网络开启一个服务器,向服务器提交数据,
            String url="http://192.168.0.103:8080/ElevenAugMyServer/MyServerLet?username=ni&password=123456";
            HttpGet get=new HttpGet(url);
            get.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");//设置服务器接收后数据的读取方式为utf8
            try {
                HttpResponse response=client.execute(get);//执行get方法得到服务器的返回的所有数据都在response中
                StatusLine statusLine=response.getStatusLine();//httpClient访问服务器返回的表头,包含http状态码
                int code=statusLine.getStatusCode();//得到状态码
                if (code== HttpURLConnection.HTTP_OK){
                    HttpEntity entity=response.getEntity();//得到数据的实体
                    InputStream is=entity.getContent();//得到输入流
                    BufferedReader br=new BufferedReader(new InputStreamReader(is));
                    String line=br.readLine();
                    while (line!=null){
                        Log.d("line",line);
                        br.readLine();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "连接成功";
        }
    }

最后要调用该类,然后执行

HTTPDoGetAsyncTask task=new HTTPDoGetAsyncTask();
                task.execute();
                Toast.makeText(HTTPClient.this, "点击了DoGet", Toast.LENGTH_SHORT).show();
                break;

HttpClient的DoPost方法

1.首先创建一个类HTTPDoGetAsyncTask 然后继承于AsyncTask,然后填写里面的3个参数,这三个参数分别是doInBackground和onProgressUpdate以及onPostExecute的参数列表的类型

2.然后在doInBackground中(该方法会自动创建一个新的线程进行操作)先创建一个HttpClient对象然后设置为Post方法,然后将数据封装到一个List中,然后用post封装为实体,在执行execute方法执行post方法
3.读取返回的信息

class  HTTPDoPostAsyncTask extends AsyncTask<String,Integer,String>{
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
        }

        @Override
        protected String doInBackground(String... params) {
            HttpClient client=new DefaultHttpClient();
            String url="http://192.168.0.103:8080/ElevenAugMyServer/MyServerLet";
            HttpPost post=new HttpPost(url);
            NameValuePair pair=new BasicNameValuePair("username","zhangsan");
            NameValuePair pair1=new BasicNameValuePair("password","123456");
            ArrayList<NameValuePair> param=new ArrayList<>();//创建ArrayList数组
            param.add(pair);
            param.add(pair1);
            try {
                post.setEntity(new UrlEncodedFormEntity(param,"UTF-8"));//创建一个实体,将ArrayList封装为UTF-8的类型
                post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");//设置服务器接收数据后的读取方式为UTF-8
                HttpResponse response=client.execute(post);//执行post方法得到服务器的返回的所有数据都在response中
                int code=response.getStatusLine().getStatusCode();//httpClient访问服务器返回的表头,包含http状态码,并得到状态码
                if (code==HttpURLConnection.HTTP_OK){
                    HttpEntity entity=response.getEntity();//得到数据的实体
                    InputStream is=entity.getContent();//得到输入流
                    BufferedReader br=new BufferedReader(new InputStreamReader(is));
                    String line=br.readLine();
                    while (line!=null){
                        Log.d("line",line);
                        br.readLine();
                    }
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "连接成功";
        }
    }

4.最后调用execute方法

HTTPDoPostAsyncTask taskDoPost=new HTTPDoPostAsyncTask();
                taskDoPost.execute();
                Toast.makeText(HTTPClient.this, "点击了DoPost", Toast.LENGTH_SHORT).show();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值