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 ...
随机推荐
- Linux下安装oracle遇到启动监听服务器启动失败
1.发现监听服务器没有启动,则 lsntctl start 启动监听服务器: 2.发现TNS-12555问题: 3.查找TNS-12555错误,找到一个满意的答案: chmod 777 /var/ ...
- CF1200E Compress Words | 字符串hash
传送门 Examples input 1 5 I want to order pizza output 1 Iwantorderpizza input 2 5 sample please ease i ...
- Qt5学习(2)
1.学习了qt quick application 这是一种跟application不同的设计方式.主要就是靠“拖拖拽拽”,然后设置属性(颜色,大小),布局(margins等),然后要注意控件的从属关 ...
- css label两端对齐
上面这种效果很常见,实现的代码如下: html部分 <ul> <li class="detail_item"> <span class="d ...
- Download EditPlus Text Editor
突然发现EditPlus还是很强大的,很好用,破解也很方便,有个牛人做了在线生成验证码,只能说服!! 下边把官网的最新下载地址贴出,当然还有在线生成验证码喽. EditPlus Text Editor ...
- 构造函数以及关键词this
Java中所有类都有构造方法,用来进行该类对象的初始化,构造方法也有名称,参数和方法体以及访问权限的设定. 1.构造方法的完整定义格式如下: [public|protected|private]< ...
- SpringBoot 2.x 开发案例之 Shiro 整合 Redis
前言 前段时间做了一个图床的小项目,安全框架使用的是Shiro.为了使用户7x24小时访问,决定把项目由单机升级为集群部署架构.但是安全框架shiro只有单机存储的SessionDao,尽管Shrio ...
- React Context 的用法
在React的官方文档中,Context被归类为高级部分(Advanced),属于React的高级API,但官方并不建议在稳定版的App中使用Context. The vast majority of ...
- Airtest入门篇
Airtest是啥? 简单理解:基于图像识别的UI自动化测试框架 俗人理解:截图即可完成自动化测试 适用场景:游戏.APP.PC软件,支持Window.Android.IOS Airtest官方文档 ...
- python专题文件操作
一 前言 本篇文章主要对文件操作进行说明,知识追寻者创作必属精品,读完本篇你将获得基础的文件操作能力,深入理解文件操作API,基础真的很重要,不管学什么知识,故看知识追寻者的专题系列真的很不错. 二 ...