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请求

最新文章

  1. android switch(String)错误:Cannot switch on a value of type String for source level below 1.7
  2. python 基础理解...
  3. html 问题
  4. 如何修改DBSNMP和SYSMAN用户的密码
  5. java中MD5加密的小使用
  6. UML学习入门就这一篇文章
  7. 106、抗锯齿方法paint.setAntiAlias(ture);paint.setFilterBitmap(true))
  8. 【周全考虑】CodeForces 245B——Internet Address
  9. Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
  10. ./configure: error: the HTTP rewrite module requires the PCRE library
  11. 在mac系统安装Apache Tomcat的详细步骤(转载自himi的博客,修改了错误添加了图片)
  12. pythonxy 安装
  13. 再造 “手机QQ” 侧滑菜单(一)——实现侧滑效果
  14. 參与 Spring 4 中文文档翻译
  15. 「洛谷3870」「TJOI2009」开关【线段树】
  16. APP安全在线检测
  17. centos7 jmeter分布式安装
  18. 请确保 ASP.NET State Service (ASP.NET 状态服务)已启动 问题解决
  19. SpringBoot在自定义类中调用service层等Spring其他层
  20. 原来的ALL IN ONE架构,快速的演进成为SOA架构

热门文章

  1. 12.pyecharts详细使用教程
  2. 从零开始入门 K8s | GPU 管理和 Device Plugin 工作机制
  3. 2020 年了,Java 日志框架到底哪个性能好?——技术选型篇
  4. TypeScript 源码详细解读(3)词法2-标记解析
  5. HTML中使用Vue+Dhtmlxgantt制作任务进度图
  6. 让VS2019支持.NET Core WinForms和WPF设计器的临时办法(转)
  7. 测试必备之Java知识(二)—— Java高级的东西
  8. Qt Installer Framework翻译(5-2)
  9. centOS7.1安装nginx与可能遇见的问题
  10. selenium2-Python环境搭建