Android客户端OkHttp的使用以及tomcat服务器的解析客户端发过来的数据
2020-02-15 21:25:42
### android客户端客户向服务器发送json字符串或者以参数请求的方式发送数据
其中又分为post请求和get请求
1.activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:background="#FFF"
android:orientation="vertical"
android:layout_height="match_parent"> <TextView
android:id="@+id/tv_okhttp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="abcdef"/>
<Button
android:id="@+id/button_activity7"
android:background="@drawable/testt"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button_activity7_2"
android:background="@drawable/testt"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
2.mainactivity.java
package com.lianggao.whut.thirdtest; import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast; import com.google.gson.Gson; import org.json.JSONStringer; import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response; public class MainActivity7 extends Activity implements View.OnClickListener {
private static final String TAG = "MainActivity7";
private Button btn_login;
private EditText editText_name;
private EditText editText_age;
private ProgressBar progressBar;
private TextView tv_okhttp;
private OkHttpClient client=new OkHttpClient();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main7); findViewById(R.id.button_activity7).setOnClickListener(this);
findViewById(R.id.button_activity7_2).setOnClickListener(this);
tv_okhttp=(TextView)findViewById(R.id.tv_okhttp); } //忽略这里,这里是用HttpURLConnection进行Get请求的,传递的是参数
private String getUserInfo(String userid){
String path="http://192.168.1.8:8080/com.lianggao.whut/Get_Resopnce_Servlet?name=lianggao&&age="+userid;
try {
URL url=new URL(path);
HttpURLConnection httpURLConnection=(HttpURLConnection)url.openConnection();
httpURLConnection.setConnectTimeout(5000);
httpURLConnection.setRequestMethod("GET");
if(httpURLConnection.getResponseCode()==200){
InputStream is=httpURLConnection.getInputStream();
return dealResponseResult(is);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private String dealResponseResult(InputStream inputStream){
String resultData=null;
ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
byte[] data=new byte[1024];
int len=0;
try {
while((len = inputStream.read(data))!= -1){
byteArrayOutputStream.write(data,0,len); }
} catch (IOException e) {
e.printStackTrace();
}
resultData=new String(byteArrayOutputStream.toByteArray());
return resultData;
}
//忽略这里是用HttpUrlConnection来post请求的,传递的是json转换的字符流
private String login(String username,String password){
String path="http://192.168.1.8:8080/com.lianggao.whut/Get_Resopnce_Servlet";
try {
URL url=new URL(path);
HttpURLConnection httpURLConnection=(HttpURLConnection)url.openConnection();
httpURLConnection.setConnectTimeout(5000);
httpURLConnection.setRequestMethod("POST");
String data="{'name':'lianggao','age':12}";
httpURLConnection.setDoOutput(true);
httpURLConnection.setRequestProperty("Content-Type","text/json;charset=utf-8");
OutputStream outputStream=httpURLConnection.getOutputStream();
outputStream.write(data.getBytes());
if(httpURLConnection.getResponseCode()==200){
InputStream is=httpURLConnection.getInputStream();
return dealResponseResult(is);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
} @Override
public void onClick(View v) {
new TestGetOrPostThread(v).start();
} public class TestGetOrPostThread extends Thread{
private View view ;
public TestGetOrPostThread(View view){
this.view=view;
}
@Override
public void run() {
switch (view.getId()){
case R.id.button_activity7:
/*String getResult=getUserInfo("12");
Log.i("MainActivity","get获取用户信息"+getResult);*/
//getUserInfo();
break;
case R.id.button_activity7_2:
/* String getResult2=login("lianggao","12");
Log.i("MainActivity","post登录结果"+getResult2);*/
login2();
break;
}
}
} //get请求,参数已经写好name,age,在服务器端可以直接得到请求参数来获得
private void getUserInfo(){
Request.Builder builder=new Request.Builder().url("http://192.168.1.8:8080/com.lianggao.whut/Get_Resopnce_Servlet?name=lianggao&&age=12");
execute(builder); }
private void execute(Request.Builder builder){
Call call=client.newCall(builder.build());
call.enqueue(callcack);
}
private Callback callcack=new Callback(){ @Override
public void onFailure(Call call, IOException e) {
Log.i("MainActivity","onFailure");
e.printStackTrace();
} @Override
public void onResponse(Call call, Response response) throws IOException {
String str=new String(response.body().bytes(),"utf-8");
Log.i("MainActivity","onResponse"+str);
android.os.Message message= Handlerokhttp.obtainMessage();
message.obj=str;
message.sendToTarget();
}
}; private Handler Handlerokhttp=new Handler(){
@Override
public void handleMessage(Message msg) {
String result=(String)msg.obj;
Gson gson=new Gson();
User user=gson.fromJson(result,User.class);
tv_okhttp.setText(user.getName()+user.getAge());
}
}; //post请求传递参数
private void login(){
FormBody.Builder formBuilder=new FormBody.Builder();
formBuilder.add("name","lianggao");
formBuilder.add("age","12");
RequestBody requestBody=formBuilder.build();
Request.Builder builder=new Request.Builder().url("http://192.168.1.8:8080/com.lianggao.whut/Get_Resopnce_Servlet").post(requestBody);
execute(builder);
}
//post请求传递json转换的流,在服务器端需要用GSON解析出来,
private void login2(){
String str="{'name':'lianggao','age':12}";
MediaType JSON=MediaType.parse("application/json; charset=utf-8");
RequestBody requestBody2=RequestBody.create(JSON,str);
Request.Builder request=new Request.Builder().url("http://192.168.1.8:8080/com.lianggao.whut/Get_Resopnce_Servlet").post(requestBody2);
execute(request);
}
}
3.服务器端
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收参数
/*
try {
if(request.getParameter("name").trim()!=null&&request.getParameter("age")!=null) {
String name=request.getParameter("name").trim();
int age=Integer.parseInt(request.getParameter("age"));
String jsonStr="";
Gson gson=new Gson();
if(name.equals("lianggao")&&age==12) {
User2 user=new User2();
user.setAge(age);
user.setName(name);
user.setResult("true");
jsonStr=gson.toJson(user);
} else {
User2 user=new User2();
user.setAge(age);
user.setName(name);
user.setResult("false");
jsonStr=gson.toJson(user);
}
response.getWriter().append(jsonStr);
return;
}
} catch (Exception e) {
// TODO: handle exception
}
*/
//接收json流
response.setContentType("application/json;charset=utf-8");//这里可能修改为text/json
String message;
User user ;
try {
BufferedReader br=new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8"));
StringBuffer sb=new StringBuffer("");
String temp;
while((temp=br.readLine())!=null) {
sb.append(temp);
}
br.close();
message=sb.toString();
System.out.println("请求报文"+message);
Gson gson=new Gson();
user=gson.fromJson(message, User.class);
if((user.getName().equals("lianggao"))&&(user.getAge()==12)){
User2 user2=new User2();
user2.setAge(user.getAge());
user2.setName(user.getName());
user2.setResult("true");
String jsonStr=gson.toJson(user2);
response.getWriter().append(jsonStr);
return;
}else {
User2 user2=new User2();
user2.setAge(user.getAge());
user2.setName(user.getName());
user2.setResult("false");
String jsonStr=gson.toJson(user2);
response.getWriter().append(jsonStr);
return;
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
参考链接:
https://www.cnblogs.com/luckyplj/p/10734458.html
javaweb Servlet接收Android请求,并返回json数据
https://www.jianshu.com/p/37e0daa57dd4
OkHttp之post请求发送给服务器json
https://www.jianshu.com/p/37e0daa57dd4
简单测试get和post请求
Android客户端OkHttp的使用以及tomcat服务器的解析客户端发过来的数据的更多相关文章
- Android 本地tomcat服务器接收处理手机上传的数据之案例演示
上一篇:Android 本地tomcat服务器接收处理手机上传的数据之环境搭建 本篇基于上一篇搭建的服务器端环境,具体介绍Android真机上传数据到tomcat服务器的交互过程 场景:A ...
- Android 本地tomcat服务器接收处理手机上传的数据之环境搭建
上一篇:Android 使用tomcat搭建HTTP文件下载服务器 本篇文章 环境:win7 + jdk1.7 + tomcat v8.0.53 工具: 1.Eclipse Eclips ...
- 转: android之虚拟机访问tomcat服务器资源
最近在研究Android虚拟机访问tomcat服务器资源,所以找了个时间写下这篇博客和大家分享一下心得. 其实Android虚拟机访问tomcat服务器非常的简单,只要不要弄错IP地址就可以访问tom ...
- Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端
Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端 本博客前面博文中利用org.apache.http包中API进行Android客户端HTTP连接的例子 ...
- Android开发之下载Tomcat服务器的文件到模拟器的SD卡
Tomcat服务器可以到Apache的官网去下载http://tomcat.apache.org/,如何配置和使用百度下也有很多介绍,只要把Java的SDK配下java_home环境变量就行了,因为T ...
- Android服务器——TomCat服务器的搭建
Android服务器--TomCat服务器的搭建 作为一个开发人员,当然是需要自己调试一些程序的,这个时候本地的服务器就十分方便了,一般都会使用TomCat或者IIS服务器,IIS就比较简单了,其实t ...
- android中用get和post方式向服务器提交请求
通过get和post方式向服务器发送请求首先说一下get和post的区别get请求方式是将提交的参数拼接在url地址后面,例如http://www.baidu.com/index.jsp?num=23 ...
- JaCoCo在Tomcat服务器上监控代码覆盖率的使用方法
简介 Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序.很多第三方的工具提 ...
- Apache与Tomcat服务器
Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.在Apache基金会里面Apache S ...
随机推荐
- 小小知识点(三十九) 正交频分复用OFDM的基本原理及实现
引言 符号间干扰(ISI)是无线传输系统设计中需要考虑的因素,采用什么样的处理方法取决于数据传输速率或等效传输带宽来决定 (1)若数据速率低且与信道最大延迟相比符号持续时间较长,那么就可能无需任何均衡 ...
- Jenkins2构建pipeline流水线
流水线有两种方式: 1.脚本式流水线 2.声明式流水线 构建流水线的简单示例: 脚本式流水线 node ('master'){ stage("Source"){ //从Git仓库中 ...
- IDEA 2019.2及以下版本永久激活教程(亲测可用)
写在前面 由于最近jetbrains公司开始严厉打击盗版激活码,所以导致一大批激活码失效,我身边的小伙伴对于如此苦恼,但是由于考虑到正版费用还是比较高昂的前提下,所以鉴于此,遂将之前整理的jar包激活 ...
- KindEditor.ready 不执行的解决方法
问题描述 按照官网的要求,一一都设置好了,但就是没法显示富文本编辑器. 1.设置好textarea输入框 <textarea id="myEditor" name=" ...
- VMware显示错误:“未能锁定文件 无法打开磁盘 ..\*.vmdk 或者某一个快照所依赖的磁盘。”解决办法
问题描述: 使用VMware时遇到错误:“未能锁定文件 无法打开磁盘 ..\*.vmdk 或者某一个快照所依赖的磁盘.” 问题出现的原因: 虚拟磁盘(.vmdk)本身有一个磁盘保护机制,为了防止多台虚 ...
- Vue中echarts的基本用法
前言:同大多数的前端框架一样,先读官网的使用方法.学会基本使用后,在实例中找到自己想要demo.拿过来改一改,一个echarts图表就形成,毕竟人家做就是为了方便使用. 我是在vue中下面直接使用的e ...
- 为什么 K8s 在阿里能成功?| 问底中国 IT 技术演进
作者: 曾凡松 阿里云云原生应用平台高级技术专家 张振 阿里云云原生应用平台高级技术专家 导读:本文描述了阿里巴巴在容器管理领域的技术演进历程,解读了为什么 K8s 最终能够大获成功的原因,以及到今年 ...
- 7.Java帝国的诞生
1972年,C诞生,而Java是1995年诞生的.它贴近硬件,有汇编语言的特性,运行极快,效率极高.早期,用在操作系统.编译器.数据库.网络系统等.但它有两把沉重的枷锁一直在程序员身上,那就是指针和内 ...
- lisp学习总结(一)
lisp太简单 lisp核心太简单了只有几个简单的逻辑定理,简单到你会认为他啥事都做不了. lisp语法太简单了,只有符号,参数,以及括号,组成一种万能的表达式. 由于上述lisp的简单,所以对于初学 ...
- windows下配置tomcat的虚拟路径编译器为IDEA
在tomcat中配置好后发现运行项目还是无效 我们需要打开tomcat的配置,把下方的红色区域勾选上即可生效 具体原因如下 那是由于默认时IDEA的热部署机制,会在以下路径: [C:\Users\系统 ...