利用Volley框架实现简单的Android与servlet信息交互

写这篇文章之前,我参考了这篇帖子内容https://blog.csdn.net/Mr_Megamind/article/details/74048891

先来进行servlet服务器的搭建

这里我就实现简单的获取来自客户端的信息,并返回一些信息

直接上代码:

package serverlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

/**
 * Servlet implementation class net
 */
@WebServlet("/net")
public class net extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public net() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setCharacterEncoding("utf-8");    //设置 HttpServletResponse使用utf-8编码
		response.setHeader("Content-Type", "text/html;charset=utf-8");    //通知浏览器使用utf-8解码

		response.getWriter().append("Served at: ").append(request.getContextPath());

	        request.setCharacterEncoding("utf-8");

	        try (PrintWriter out = response.getWriter()) {

	            //获得请求中传来的用户名和密码
	            String accountNumber = request.getParameter("AccountNumber");
	            String password = request.getParameter("Password");

	           String s=accountNumber+password;
	           System.out.println(s);
	            Map<String, String> params = new HashMap<>();
	            JSONObject jsonObject = new JSONObject();
	            params.put("Result",s);

	            jsonObject.put("params",params);
	            System.out.println(jsonObject.toString());
	            response.resetBuffer();//清空原有的输出流,方便客户端获取到json字符串

	            out.write(jsonObject.toString());//将json字符串写入输出流
	        }

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

  

接下来是客户端的代码

使用Volley首先要在项目中添加Volley.jar包

接下来是使用步骤

1.创建RequestQuene对象,定义网络请求队列;

2.创建**Request对象,**代表String、JSON、Image用于定义网络请求的接收,这里我使用的是StringRequest;

3.把**Request请求对象添加到RequestQuene对象中,开始执行网络请求;

4.在AndroidManifest中注册,添加网络权限;

这里先附上添加网络权限的语句:

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

然后是app内进行网络请求的函数体的代码

public  void LoginRequest(final String accountNumber, final String password) {
        //请求地址
        String url = "http://域名:端口号/MyFirstWebApp/LoginServlet";
        String tag = "Login";   

        //取得请求队列
        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

        //防止重复请求,先取消tag标识的请求队列
        requestQueue.cancelAll(tag);

        //创建StringRequest,定义字符串请求的请求方式为POST(省略第一个参数会默认为GET方式)
        final StringRequest request = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override

                    public void onResponse(String response) {

                        try {

//将传回的字符串转化为JSONObject
                            JSONObject jsonObject = (JSONObject) new         JSONObject(response).get("params");

                           String result = jsonObject.getString("Result"); 

//result的值就是servlet传回的result的值,对应的就是servlet中s的值
                            text.setText(result);//这部分内容是对返回信息的使用,text是一个Textview

                        } catch (JSONException e) {
                            //请求异常操作
                       Toast.makeText(MainActivity.this.getApplicationContext(),"无网络",Toast.LENGTH_SHORT).show();
                        }

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //响应错误操作

                Toast.makeText(MainActivity.this.getApplicationContext(),"响应错误",Toast.LENGTH_SHORT).show();
            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("AccountNumber", accountNumber);  //注⑥
                params.put("Password", password);
                return params;
            }
        };

        //设置Tag标签
        request.setTag(tag);

        //将请求添加到队列中
        requestQueue.add(request);
    }

        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            String str = null;

            try {
                str = new String(response.data, "utf-8");
            }
            catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            return Response.success(str, HttpHeaderParser.parseCacheHeaders(response));
        }
    }    

原文地址:https://www.cnblogs.com/liuleliu/p/12384747.html

时间: 2024-10-29 07:38:59

利用Volley框架实现简单的Android与servlet信息交互的相关文章

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

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

利用Volley框架开发实战代码详解(快速开发,代码直接可以用在实战中...)

说到Volley,则需要了解Volley这个框架,这里我就不用多说了,博客有转载.... 这里我就直接上代码了: 并且有注释: import java.net.URLDecoder; import android.app.Dialog; import android.content.DialogInterface; import android.util.Log; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.Type

volley框架 出现at com.android.volley.Request.&lt;init&gt;

请求json数据的时候出现这种情况: 原因: // 访问网络,初始化详情 JsonObjectRequest jr = new JsonObjectRequest(Request.Method.GET, RequestUrl, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject json) { hiddenLoading(); HandlerData(json,R_cod

iOS利用HealthKit框架从健康app中获取步数信息

微信和QQ的每日步数最近十分火爆,我就想为自己写的项目中添加一个显示每日步数的功能,上网一搜好像并有相关的详细资料,自己动手丰衣足食. 统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为我们统计好了步数数据 我们只要使用HealthKit框架从健康app中获取这个数据信息就可以了 这篇文章对HealthKit框架进行了简单的介绍:http://www.cocoachina.com/ios/20140915/9624.html 对HealthKit框架有了简单的了解后我们就可以开始了

利用 pyspider 框架抓取猫途鹰酒店信息

利用框架 pyspider 能实现快速抓取网页信息,而且代码简洁,抓取速度也不错. 环境:macOS:Python 版本:Python3. 1.首先,安装 pyspider 框架,使用pip3一键安装: pip3 pyspider 2.终端输入 pyspider all 启动 pyspider: 打开 Chrome,地址栏输入 localhost:5000 进入 pyspider 框架的webui界面. 点击 create ,创建 一个新的project. 3.创建完 project 后,我们便

简单的android客户端servlet服务端的交互

android客户端通过GET方式发送数据到服务端,服务端获得数据后,从服务端获取数据库里的信息,并以JSON数据格式返回. 1.GET方式传参的格式: http://127.0.0.1/AndroidService/android/upload?title=aaa&timelength=90的形式 参数是?后的title=aaa&timelength=90.多个参数用&连接. 2.连接服务器发送请求参数并获得服务器返回的数据,客户端获得数据后,主要是对JSON数据的一些解析. /

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

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

Volley框架源码浅析(一)

尊重原创http://blog.csdn.net/yuanzeyao/article/details/25837897 从今天开始,我打算为大家呈现关于Volley框架的源码分析的文章,Volley框架是Google在2013年发布的,主要用于实现频繁而且粒度比较细小的Http请求,在此之前Android中进行Http请求通常是使用HttpUrlConnection和HttpClient进行,但是使用起来非常麻烦,而且效率比较地下,我想谷歌正式基于此种原因发布了Volley框架,其实出了Voll

IT观察】网络通信、图片显示、数据库操作……Android程序员如何利用开源框架

每个Android 程序员都不是Android应用开发之路上孤军奋战的一个人,GitHub上浩如烟海的开源框架或类库就是前人为我们发明的轮子,有的轮子能提高软件性能,而有的轮子似乎是以牺牲性能为代价换取编程速度.擅长利用轮子的程序员已经遥遥领先,不擅长利用轮子的程序员总是嫌前人发明的轮子不够圆,自己造个方轮子上路后才发现落后了. 作者:玖哥来源:51CTO|2017-10-19 16:06 移动端 收藏 分享 [51CTO.com原创稿件]每个Android 程序员都不是Android应用开发之