Android——远程存储器存储:JDK方式和Volley框架的get和post

注意:要搭建好环境,运行

用volley方法时要把包导入project下的模块下的libs目录下

package com.example.chenshuai.myapplication;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    EditText et_bt_3;
    EditText et_bt_4;

    RequestQueue requestQueue;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        et_bt_3 = (EditText)findViewById(R.id.et_bt_3);
        et_bt_3.setText("http://192.168.1.104:8080/TestWeb/index.jsp");

        et_bt_4 = (EditText)findViewById(R.id.et_bt_4);

        //获取Volley的请求队列
        requestQueue = Volley.newRequestQueue(this);
    }
    public void getonclick(View view)
    {
        //1.
    /*
     * 使用httpUrlConnection提交get请求
     */
    /*
        1. 显示ProgressDialog
        2. 启动分线程
        3. 在分线程, 发送请求, 得到响应数据
            1). 得到path, 并带上参数name=Tom1&age=11
            2). 创建URL对象
            3). 打开连接, 得到HttpURLConnection对象
            4). 设置请求方式,连接超时, 读取数据超时
            5). 连接服务器
            6). 发请求, 得到响应数据
                得到响应码, 必须是200才读取
                得到InputStream, 并读取成String
            7). 断开连接
        4. 在主线程, 显示得到的结果, 移除dialog
     */
        //1. 显示ProgressDialog
        final ProgressDialog progressDialog = ProgressDialog.show(this,null,"正在请求中...");

        //2. 访问网络 开启子线程

        new Thread()
        {
            @Override
            public void run() {

                try {

                    //1.URl
                    URL url = new URL(et_bt_3.getText().toString()+"?name=tom");

                    //2.获取连接
                    HttpURLConnection huc = (HttpURLConnection)url.openConnection();

                    //3.请求方式
                    huc.setRequestMethod("GET");
                    //设置超时
                    huc.setConnectTimeout(3000);
                    huc.setReadTimeout(3000);

                    //连接并发送请求
                    huc.connect();

                    //接收
                    //判断返回状态 200
                    int code = huc.getResponseCode();

                    if (code == 200)
                    {
                        //接收数据

                        //输入流
                        InputStream is = huc.getInputStream();
                        //读取流
                        //1- byte数组
                        byte[] b = new byte[1024];
                        //2- 读到数组的长度
                        int i=0;
                        //3.接收到的数据
                        final StringBuilder sbl = new StringBuilder();

                        //边读边写
                        while((i=is.read(b))>0)
                        {
                            sbl.append(new String(b,0,i));
                        }
                        //释放资源
                        is.close();
                        huc.disconnect();

                        //通过主线程显示信息和关闭对话框
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                et_bt_4.setText(sbl);

                                //关闭对话框
                                progressDialog.dismiss();
                            }
                        });

                    }
                    else
                    {
                        Toast.makeText(MainActivity.this, "连接错误,返回的状态码= " + code, Toast.LENGTH_SHORT).show();
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                    progressDialog.dismiss();
                }

                super.run();
            }
        }.start();

    }

    public void postonclick(View view)
    {

        //1. 显示ProgressDialog 进度对话框
        final ProgressDialog dialog = ProgressDialog.show(this, null, "正在加载中,请稍后...");
        //2.开启子线程 访问网络
        new Thread()
        {
            public void run()
            {
                try
                {
                    //1) -URL
                    URL url = new URL(et_bt_3.getText().toString());
                    //2) -URL获取连接
                    HttpURLConnection huc =(HttpURLConnection)url.openConnection();

                    //请求方式
                    huc.setRequestMethod("POST");
                    //设置超时
                    huc.setConnectTimeout(3000);
                    huc.setReadTimeout(3000);

                    //连接并发送请求
                    huc.connect();

                    //用输出流设置请求体
                    OutputStream os = huc.getOutputStream();

                    String str = "name=rose";
                    os.write(str.getBytes("UTF-8"));

                    //接收:
                    //判断返回状态码 200
                    int code = huc.getResponseCode();

                    if (code == 200)
                    {
                        //接收数据

                        //输入流:
                        InputStream is = huc.getInputStream();

                        //读取流
                        //1-byte数组
                        byte[] b = new byte[1024];
                        //2-读到的长度
                        int i = 0;
                        //3-接收到的数据
                        final StringBuilder sbl = new StringBuilder();

                        while ((i = is.read(b))>0)
                        {
                            sbl.append(new String(b,0,i));
                        }
                        //释放资源
                        is.close();
                        huc.disconnect();

                        //通过主线程显示信息和关闭对话框
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                et_bt_4.setText(sbl);
                                //关闭对话框
                                dialog.dismiss();
                            }
                        });

                    }
                    else {
                        Toast.makeText(MainActivity.this, "连接错误,返回状态码=" + code, Toast.LENGTH_SHORT).show();
                    }

                } catch (Exception e)
                {
                    e.printStackTrace();

                    dialog.dismiss();
                }
            }

        }.start();
    }

    public void volleygetonclick(View view)
    {
        //1.进度对话框
        final ProgressDialog progressDialog = ProgressDialog.show(this,null,"正在加载,请稍后。。。");

        //构造Volley的请求对象 参数:1-地址 2-正常处理监听 3-错误处理监听
        StringRequest sr = new StringRequest(et_bt_3.getText().toString() + "?name=jack", new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {

                et_bt_4.setText(s);

                progressDialog.dismiss();

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

                Toast.makeText(MainActivity.this, "访问异常", Toast.LENGTH_SHORT).show();
                //出错也要关闭
                progressDialog.dismiss();

            }
        });

        //把请求对象放入队列
        requestQueue.add(sr);
    }

    public void volleypostonclick(View view)
    {
        //1.进度对话框
        final  ProgressDialog progressDialog = ProgressDialog.show(this,null,"正在加载,请稍后。。。");

        //构造Volley的请求对象
        StringRequest sr = new StringRequest(Request.Method.POST,et_bt_3.getText().toString(), new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {

                et_bt_4.setText(s);
                progressDialog.dismiss();

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

                Toast.makeText(MainActivity.this, "访问异常", Toast.LENGTH_SHORT).show();
                progressDialog.dismiss();
            }
        }){
            //重写设置参数的方法
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {

                Map<String,String> m = new HashMap<String,String>();
                m.put("name","volley");

                return m;
            }
        };
        //把请求对象放入队列

        requestQueue.add(sr);

    }
}
时间: 2024-10-14 12:42:30

Android——远程存储器存储:JDK方式和Volley框架的get和post的相关文章

Android之Volley框架源码分析

临近毕业,各种事情各种忙.我也没有认真专注写过博客,最近仔细看了Volley框架的使用及其源码,思前想后,想挑战一下自己,还是写一篇博客来分享,如有错误,欢迎吐槽. Volley简介 网络请求是一个App很重要的一部分,android系统只是提供了一个平台,而android应用则是基于这个平台上进行展示数据,起到与用户进行交互的作用,数据来源于服务端,而二者之间必须通过互联网进行传输数据,在Android系统发布初期,很多开发者都是在Apache协会的Http协议的基础上进行网络请求方法的封装,

数据储存——远程服务器存储——JDK方式

JDK方式 API 一.URL 1.new  URL("http://网络资源路径") 2.openConnection(),返回URLConnection对象 二.HttpURLConnection 1.setRequestMethod(“GET”/“POST”):设置请求方式 2.setConnectTimeout(毫秒数):设置连接超时时间 3.setReadTimeout(毫秒数):设置读超时时间 4.connect( ):连接服务器,发送请求 5.getOutputStrea

Android Volley 框架的使用(一)

为什么要使用Volley框架 开发android应用很多时候都要涉及网络操作,Android SDK中提供了HttpClient 和 HttpUrlConnection两种方式用来处理网络操作,但当应用比较复杂的时候需要我们编写大量的代码处理很多东西:图像缓存,请求的调度等等: 而Volley框架就是为解决这些而生的,它与2013年Google I/O大会上被提出:使得Android应用网络操作更方便更快捷:抽象了底层Http Client等实现的细节,让开发者更专注与产生RESTful Req

远程服务器存储之JDK方式

一.API 1.new  URL("http://网络资源路径") 2.openConnection(),返回URLConnection对象 二.HttpURLConnection 1.setRequestMethod(“GET”/“POST”):设置请求方式 2.setConnectTimeout(毫秒数):设置连接超时时间 3.setReadTimeout(毫秒数):设置读超时时间 4.connect( ):连接服务器,发送请求 5.getOutputStream( ):得到连接输

Android——Volley框架学习总结

Volley框架特点: 适用于频繁请求而每次请求数据量不会很大: 在请求的基础上做了磁盘缓存: 防止多次相同请求浪费资源: 提供String.Json.图片异步下载: 网络请求的优先级处理: 图片请求无需担心生命周期问题. Volley框架使用: 首先,通过Volley的静态方法new一个请求队列 1 RequestQueue mQueue = Volley.newRequestQueue(context); 假如我们创建一个StringRequest实例(Volley提供,StringRequ

android Volley 框架详解

开发android应用很多时候都要涉及网络操作,Android SDK中提供了HttpClient 和 HttpUrlConnection两种方式用来处理网络操作,但当应用比较复杂的时候需要我们编写大量的代码处理很多东西:图像缓存,请求的调度等等: 而Volley框架就是为解决这些而生的,它与2013年Google I/O大会上被提出:使得Android应用网络操作更方便更快捷:抽象了底层Http Client等实现的细节,让开发者更专注与产生RESTful Request.另外,Volley在

Android Volley框架使用流程(源码方面)

以前在android上网络通信都是使用的Xutils 因为用它可以顺道处理了图片和网络这两个方面,后来发觉Xutils里面使用的是HttpClient  而Google在6.0的版本上已经把HttpClient废除了,所以开始寻找新的网络框架,okhttp也用过,但是它是在作用在UI线程,使用起来还需要用handler 所以就先用着Volley框架了.  这里我先分析下Volley框架的简单网络请求的源码. 使用Volley请求网络数据的简单过程: RequestQueue queue = Vo

Android利用Volley框架加载网络图片

Volley框架是在Google I/O 2013上Volley发布的,目的是使Android平台上的网络通信库,能使网络通信更快,更简单,更健壮.我们也简单了解下Volley引入的背景,在Volley出现以前,我们可能面临如下的问题,比如要在ListView或是GridView中加载数量较多的图片时:先在ListAdapter#getView()里开始图像的读取,再通过AsyncTask等机制使用HttpURLConnection从服务器去的图片资源,然后在AsyncTask#onPostEx

Android网络通信Volley框架源码浅析(三)

尊重原创 http://write.blog.csdn.net/postedit/26002961 通过前面浅析(一)和浅析(二)的分析,相信大家对于Volley有了初步的认识,但是如果想更深入的理解,还需要靠大家多多看源码. 这篇文章中我们主要来研究一下使用Volley框架请求大量图片的原理,在Android的应用中,通过http请求获取的数据主要有三类: 1.json 2.xml 3.Image 其中json和xml的获取其实原理很简单,使用Volley获取感觉有点大财小用了,了解Volle