zoukankan      html  css  js  c++  java
  • Android课程---远程服务器存储

    在使用Volley进行获取数据时,需要事先准备环境:在libs里面导入一个Volley.jar包,在网上都有,可以下载下来导入,或者自己电脑上有DT的,自己合成一个包也行。

    WebActivity.java

    package com.hanqi.test5;
    
    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 WebActivity extends AppCompatActivity {
    
        EditText et_w5;
        EditText et_w6;
    
        RequestQueue requestQueue;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_web);
    
            et_w5 = (EditText)findViewById(R.id.et_w5);
            et_w5.setText("http://192.168.0.122:8080/TestWeb/index.jsp");
    
            et_w6 = (EditText)findViewById(R.id.et_w6);
    
            //获取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_w5.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_w6.setText(sbl);
    
                                    //关闭对话框
                                    progressDialog.dismiss();
                                }
                            });
    
                        }
                        else
                        {
                            Toast.makeText(WebActivity.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_w5.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_w6.setText(sbl);
                                    //关闭对话框
                                    dialog.dismiss();
                                }
                            });
    
    
    
                        }
                        else {
                            Toast.makeText(WebActivity.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_w5.getText().toString() + "?name=jack", new Response.Listener<String>() {
                @Override
                public void onResponse(String s) {
    
                    et_w6.setText(s);
    
                    progressDialog.dismiss();
    
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
    
                    Toast.makeText(WebActivity.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_w5.getText().toString(), new Response.Listener<String>() {
                @Override
                public void onResponse(String s) {
    
                    et_w6.setText(s);
                    progressDialog.dismiss();
    
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
    
                    Toast.makeText(WebActivity.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);
    
    
        }
    }

    首先得获得权限:

        <uses-permission android:name="android.permission.INTERNET" />

    activity_web.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.hanqi.test5.WebActivity"
        android:orientation="vertical">
    
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/et_w5"
            android:hint="URL地址"
            android:text="http://192.168.0.122:8080/TestWeb/index.jsp"/>
        <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="JDK_Get方式"
            android:onClick="getonclick"/>
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="JDK_Post方式"
            android:onClick="postonclick"/>
    </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Android的Get方式"
                android:onClick="bt7_OnClick"/>
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Android的Post方式"
                android:onClick="bt8_OnClick"/>
        </LinearLayout>
    
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Volley的Get方式"
        android:onClick="volleygetonclick"/>
    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Volley的Post方式"
        android:onClick="volleypostonclick"/>
    </LinearLayout>
        <EditText
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:id="@+id/et_w6"/>
    
    </LinearLayout>

    效果图:

  • 相关阅读:
    IsPostBack
    判断客户端.net版本
    js 汉字转换成拼音 转载
    观察者模式
    常用的js阻止冒泡的方法
    jquery中事件的绑定
    uclinux编译 skyeye运行
    dotNet学习之路 Struct与Class异同点
    dotNet学习之路 Delegate内部原理
    设计模式之旅(策略模式) 十号刚发工资的博友们,赶紧跟我一起算算你们的老板有没有给你少发工资。。。
  • 原文地址:https://www.cnblogs.com/0927wyj/p/5419890.html
Copyright © 2011-2022 走看看