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 ...
随机推荐
- 微信小程序开发笔记(一)
一.为什么要学习微信小程序开发 微信小程序是一个可以在微信上打开的轻应用,他是由多个页面组成的程序,跟传统APP比较如下: 优点 1.不需要在应用商店下载,不占用内存空间,即开即用 2.可以在微信内直 ...
- 关于ESP8266 NodeCMU固件无法刷入新代码的解决方法
在玩ESP8266时,有时候会无意中写了导致死循环的代码,或都某些函数传递了不合适的参数导致系统崩溃,这可能会导致ES8266不停地重启,这时我们发现无法刷入新的代码,也无法删除8266中的原代码.我 ...
- 2019年全网最热门的123个Java并发面试题总结
前言 并发编程几乎是所有互联网公司面试必问的问题,并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能.它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰.思维缜密, ...
- Python学习中的“按位取反”笔记总结
| 疑惑 最近在学习Python的过程中了解到位运算符,但对于按位取反有点迷糊,就比如说~9(按位取反)之后的结果是-10,为什么不是6呢?所以下面就来看看为什么不是6,正确结果是如何计算出来的呢? ...
- 基于Netty和SpringBoot实现一个轻量级RPC框架-Client篇
前提 前置文章: <基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> <基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇> 前 ...
- cogs 2098. [SYOI 2015] Asm.Def的病毒 LCA 求两条路径是否相交
2098. [SYOI 2015] Asm.Def的病毒 ★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out 简单对比时间限制:1 s 内存限制:256 M ...
- SpringMVC启动流程源码解密
我们知道,SpringMVC最后是通过Tomcat来进行部署的.当在Servlet中进行进行应用部署时,主要步骤为(引用来自http://download.oracle.com/otn-pub/jcp ...
- 成功填坑! Java引入QQ登录时,AccessToken [accessToken=, expireIn=];
主要就是会一直进入下面这一行,也就是accessTokenObj.getAccessToken().equals("") 此时前端显示如下 AccessToken [accessT ...
- 幽灵java进程引起的: FATAL ERROR in native method
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT( ...
- Mysql的binlog日志与mysqlbinlog命令
binlog相关 MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select.show等),以事件形式记录,还包 ...