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服务器的解析客户端发过来的数据的更多相关文章

  1. Android 本地tomcat服务器接收处理手机上传的数据之案例演示

    上一篇:Android 本地tomcat服务器接收处理手机上传的数据之环境搭建     本篇基于上一篇搭建的服务器端环境,具体介绍Android真机上传数据到tomcat服务器的交互过程   场景:A ...

  2. Android 本地tomcat服务器接收处理手机上传的数据之环境搭建

    上一篇:Android 使用tomcat搭建HTTP文件下载服务器   本篇文章   环境:win7 + jdk1.7 + tomcat v8.0.53   工具: 1.Eclipse  Eclips ...

  3. 转: android之虚拟机访问tomcat服务器资源

    最近在研究Android虚拟机访问tomcat服务器资源,所以找了个时间写下这篇博客和大家分享一下心得. 其实Android虚拟机访问tomcat服务器非常的简单,只要不要弄错IP地址就可以访问tom ...

  4. Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端

    Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端 本博客前面博文中利用org.apache.http包中API进行Android客户端HTTP连接的例子 ...

  5. Android开发之下载Tomcat服务器的文件到模拟器的SD卡

    Tomcat服务器可以到Apache的官网去下载http://tomcat.apache.org/,如何配置和使用百度下也有很多介绍,只要把Java的SDK配下java_home环境变量就行了,因为T ...

  6. Android服务器——TomCat服务器的搭建

    Android服务器--TomCat服务器的搭建 作为一个开发人员,当然是需要自己调试一些程序的,这个时候本地的服务器就十分方便了,一般都会使用TomCat或者IIS服务器,IIS就比较简单了,其实t ...

  7. android中用get和post方式向服务器提交请求

    通过get和post方式向服务器发送请求首先说一下get和post的区别get请求方式是将提交的参数拼接在url地址后面,例如http://www.baidu.com/index.jsp?num=23 ...

  8. JaCoCo在Tomcat服务器上监控代码覆盖率的使用方法

    简介 Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序.很多第三方的工具提 ...

  9. Apache与Tomcat服务器

    Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.在Apache基金会里面Apache S ...

随机推荐

  1. 解决 Table ‘performance_schema.session_variables’ doesn’t exist 问题

    performance_schema在mysql5.5以上就有自带 performance_schema(安装数据库时自带的)如果装数据库或者使用数据时不小心删除了,就会出现Table‘perform ...

  2. WIN10高清壁纸

    下面给大家分享我自己收集的WIN10的壁纸(大家可以存在在自己网盘里) 百度网盘下载 提取码:dsf5

  3. xshell连接kali linux虚拟机

    这次测试一波三折 刚开始在百度经验看的先修改ssh参数,蓝色的字是百度的,重点都在图片上 1.修改sshd_config文件,命令为: vi /etc/ssh/sshd_config 将#Passwo ...

  4. Qt 下QMessageBox下中文乱码问题

    Qt版本 Qt Creator 2.4.1 Based on Qt 4.8.0 (64 bit) 现象 QMessageBox调用setText()一直是乱码 解决方法 QTextCodec::set ...

  5. tantivy&lucene功能,写入性能对比

    硬件概述:cpu:24,内存:20g,磁盘:10*2.7T. 写入性能:(不对ip进行添加geo信息). 写入性能对比 速度 Commit耗时(秒) 500*1000条 Bulk耗时(秒) 1000条 ...

  6. oop(面向对象语言的三大特征):封装,继承,多态; (抽象),函数绑定

    封装/隐藏 : 通过类的访问限定符实现的   private    public 继承的意义之一:代码的复用 类的继承是指在一个现有类的基础上去构建一个新的类,构造出来的新类被称为派生类(子类),现有 ...

  7. 开启我的python之路,第一节,git版本管理工具

    git版本管理工具 一.git功能与结构 1.Git是分布式管理系统,服务端和客户端都有版本控制功能,都能进行代码的提交,合并 2.git分为工作区,暂存区,本地仓库和远程仓库 二.git安装与查看 ...

  8. Java List集合的介绍与常用方法

    List接口的介绍 List接口简介: java.util.List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合. 在List集合 ...

  9. log4j的xml配置

    主要记录下方便下次查找 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:conf ...

  10. @ControllerAdvice实现优雅地处理异常

    @ControllerAdvice,是Spring3.2提供的新注解,它是一个Controller增强器,可对controller中被 @RequestMapping注解的方法加一些逻辑处理.最常用的 ...