Android基础_网络请求/AsyTaskDemo(六)

原生网络请求

    /* 1.创建一个子线程
     * 2.定位资源url
     *      new URL
     * 3.连接服务器
     *      url.open()
     *      conn.setRequestMethod("GET");
     * 4.获取响应码检测是否连接成功
     * 5.成功后进行响应操作,获取字节输入流 并转换成字符流
     *  getInputStream();
     *  304-重复获取资源
     *  206-多线程下载,成功了一部分
     * 6.获取textview
     * 7.在主线程中设置text
     * */
    private void doGet() {
        new Thread() {
            public void run() {
                try {
                    String urlPath = "http://192.168.35.180/login/login?username=lean&pwd=123456";
                    URL url = new URL(urlPath);
                    HttpURLConnection conn =(HttpURLConnection) url.openConnection();
                    conn.setRequestMethod("GET");
                    int rsp =conn.getResponseCode();
                    if(rsp==200){
                        InputStream is = conn.getInputStream();
                        final BufferedReader reader = new BufferedReader(new InputStreamReader(is));            
                        runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                try {
                                    mTv.setText(reader.readLine());
                                } catch (Exception e) {
                                }
                            }
                        });
                    }
                } catch (Exception e) {
                    Log.v("meeeeeee", "报错");
                }
            }
        }.start();
    }
        /* 1.创建一个线程
     * 2.创建url 打开连接 
     * 3.设置请求参数
     *      1.修改请求方式 
     *      setrequestMethod("post");
     *      2.设置请求头
     *      setRequestProperty();
     *      3.设置请求数据
     * 4.获取响应码进行判断
     * 5.获取资源
     * 6.断开连接
     * */
    private void doPost(final String name ,final String pwd){
        new Thread() {
            public void run() {
                try {
                    URL url = new URL("http://192.168.35.180/loginPost/login");
                    HttpURLConnection conn=(HttpURLConnection) url.openConnection();

                    conn.setRequestMethod("POST");
                    //区别:post请求会将参数传入请求头中,而不是暴露在网址中
                    String params = "username="+name+"&pwd="+pwd;
                    conn.setRequestProperty("Content-Length", params.length()+"");
                    //将请求参数通过输出流写到服务器
                    OutputStream os = conn.getOutputStream();
                    os.write(params.getBytes());

                    if(conn.getResponseCode()==200){
                        InputStream is = conn.getInputStream();
                        loadLoginResource(is);
                    }
//                  conn.disconnect();
                } catch (Exception e) {
                }
            }
        }.start();
    }

HttpClient框架

    /* 1.创建子线程
     * 2.创建HttpClient
     * 3.创建getpost对象并传入url
     * 4.new一个 urlencodeformentity用来设置请求头
     *      1.ArrayList<BasicNameValuePair> param
     *      2.param.add(new BasicNmaeVauePair(key,value);)
     *      3.new UrlEncodeFormEntity(param);
     * */
    private void doPost(final String name, final String pwd) {
        new Thread() {
            public void run() {
                try {
                    DefaultHttpClient client = new DefaultHttpClient();
                    String url = "http://192.168.35.180/loginPost/login";
                    HttpPost request = new HttpPost(url);
                    Log.v("meeeeeee", "开启子线程");
                    ArrayList<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
                    parameters.add(new BasicNameValuePair("username", name));
                    parameters.add(new BasicNameValuePair("pwd", pwd));

                    HttpEntity entity=new UrlEncodedFormEntity(parameters);
                    request.setEntity(entity);
                    Log.v("meeeeeee", "获取实例");
                    HttpResponse response = client.execute(request);
                    StatusLine statusLine = response.getStatusLine();
                    Log.v("meeeeeee", "获取实例"+statusLine.getStatusCode());
                    if(statusLine.getStatusCode()==200){
                        HttpEntity entity2 = response.getEntity();
                        InputStream is = entity2.getContent();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
//                      Toast.makeText(MainActivity.this, ""+reader.readLine(), 0).show();
                        Log.v("meeeeeee", reader.readLine());
                    }
                } catch (Exception e) {
                }
            }
        }.start();
    }
    /* 1.创建子线程
     * 2.构建浏览器
     * 3.创建get请求
     *  new httpget(urlpath);
     * 4.读取响应
     *      1.执行get请求 返回一个resp对象
     *          clien.execute(request);
     *      2.获取响应行,
     *          resp.getStatusLine();
     *      3.响应行获取响应码
     *          statusLine.getStatusCode();
     * 5.获取返回的数据
     *      1.
     * */
    void doGet(final String name ,final String pwd){
        new Thread(){
            public void run(){
                Log.v("meeeeeee", "子线程开始");
                try {
                    String urlPath = "http://192.168.35.180/login/login?username="
                            + name + "&pwd=" + pwd;
                    HttpClient client = new DefaultHttpClient();
                    HttpGet request = new HttpGet(urlPath);

                    HttpResponse response = client.execute(request);
                    Log.v("meeeeeee", "获取响应");
                    StatusLine statusLine = response.getStatusLine();
                    if(statusLine.getStatusCode()==200){
                        Log.v("meeeeeee", "获取响应码");
                        HttpEntity entity = response.getEntity();
                        InputStream is = entity.getContent();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
//                      Toast.makeText(MainActivity.this, ""+reader.readLine(), 0).show();
                        Log.v("meeeeeee", reader.readLine());
                    }
                } catch (Exception e) {
                }
            }
        }.start();
    }

Volley

    /* 1.创建一个StringRequest对象
     *          1.url
     *          2.Listener
     *          3.errorListener
     *              404 500等时候会被调用
     * 2.创建一个请求队列
     * 3.执行一个网络请求       
     *  */
    public void volleyGet(View v){
        String url = "http://f.xmg520.cn:82/LoginDemo/servlet/LoginToAction?passWord=123&userName=xiaomage&format=xml";
        Listener<String> listener =new Listener<String>(){

            @Override
            public void onResponse(String response) {
                Log.v("meeeeeee", ""+response);
            }

        };
        ErrorListener errorListener = new ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
            }
        };
        StringRequest req = new StringRequest(url, listener, errorListener);
        RequestQueue qq = Volley.newRequestQueue(this);
        qq.add(req);
    }

    /*
     * 1.创建一个StringRequest对象,并实现HashMap<String,String> getParame() 
     *  1.Method.post
     *  2.创建一个url 
     *  3.Listener<T> ` 
     *  4.ErrorListener<T> 2.创建一个RequestQueue对象
     * 3.Rqq.add(req);
     */
    public void volleyPost(View v) {
        String url = "http://192.168.137.1/loginPost/login";
        Listener<String> lis = new Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.v("meeeeeee", response);
            }
        };
        StringRequest req = new StringRequest(Method.POST, url, lis, null) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                HashMap<String, String> params = new HashMap<String, String>();
                params.put("username", "lean");
                params.put("pwd", "123456");
                return params;
            }
        };
        RequestQueue reqq = Volley.newRequestQueue(this);
        reqq.add(req);
    }

AsyTaskDemo

    /* 需求:执行网络请求并修改UI
     * 1.创建一个AsyncTask对象 ,并实现其在子线程中运行的方法
     *      AsyncTask<Void, Void, Void>
     *          1.第一个参数是传进子线程中的形参,在子线程中是作为数组
     *          2.在线程执行过程中返回进度的形参,是publishProgress()的参数类型
     *          3.第三个参数是子线程返回的数据类型
     *      线程暂停
     *          SystemClock.sleep(1000);
     * 2.启动一个异步任务,在子线程运行
     *      asyncTask.execute("s");
     * 3.实现onpostexecuta()在主线程中修改ui
     *      asyncTask.onPostExecute(String result){
     * }
     * 4.补充:
     *      1.实现onpreexecute()用于初始化网络环境,该方法会在网络请求前调用
     *          该方法在主线程中运行
     *      2.onprogressupdate(T... values)
     * */
    public void start(View v){
        AsyncTask<String, Integer, String> asyncTask = new AsyncTask<String, Integer, String>(){
            @Override
            protected String doInBackground(String... params) {
//              4.2 
                for(int i=0;i<100;i++){
                    SystemClock.sleep(50);
                    publishProgress(i);
                }

                return params[0];
            }
            @Override
            protected void onPostExecute(String result) {
                Toast.makeText(MainActivity.this,result , 0).show();
            }
            @Override
            protected void onProgressUpdate(Integer... values) {
                // TODO Auto-generated method stub
                super.onProgressUpdate(values);
            }
        };
        asyncTask.execute("你没的");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值