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

来源:互联网 发布:超级电子仿真软件 编辑:程序博客网 时间:2024/06/05 15:03

原生网络请求

    /* 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("你没的");    }
原创粉丝点击