运行结果图android
1.Android端结果图json
2.本地服务端结果图tomcat
一 .实现内容服务器
实现android移动端与本地服务端进行数据传输,实现的结果为手机端向本地服务端传递数据,本地服务端在接收到数据以后再返回一个数据进行反馈。网络
二 .实现方法app
2.1 数据传输的格式ide
数据是以json的格式传输,在客户端进行上传前就须要将数据进行以json的格式进行封装,在服务端接收到数据以后,在要对接收到的json格式数据进行解析。最后再以一样格式的数据进行返回给客户端。工具
2.2 访问网络的方法post
使用HTTP协议进行访问网络,使用到的网络通讯库为OkHttp。gradle
2.3 使用工具软件
本文使用的工具为 Android Studio与MyEclipse,服务器为tomcat8.0, android虚拟机为 genymotion。
三 .实现代码
3.1 客户端代码
public class MainActivity extends AppCompatActivity { private EditText TextInfo; private TextView Backtext; private Button button; public static final String TAG = "MainActivity"; public static final MediaType JSON=MediaType.parse("application/json; charset=utf-8"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextInfo = findViewById(R.id.TextInfo); button = findViewById(R.id.button); Backtext = findViewById(R.id.backtext); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { UpLoad(); } }); } //向服务端传数据 public void UpLoad(){ new Thread(new Runnable() { @Override public void run() { OkHttpClient client = new OkHttpClient(); //建立request实例 //处理Json类型数据放在异常处理中 try{ //定义处理数据json JSONObject json = new JSONObject(); //获取EditText上数据 String textInfo = TextInfo.getText().toString(); //设置json key-value json.put("textinfo",textInfo); //转换为字符串 String _json = json.toString(); //目标url地址 String url = "http://192.168.43.75:8080/AProject/Servlet"; RequestBody requestBody = RequestBody.create(JSON,_json); Request request = new Request.Builder() .url(url) .post(requestBody) .build(); //Log.i(TAG,"<===@===>"); //设置接反馈 Response response = client.newCall(request).execute(); if(response.isSuccessful()){ String Data = response.body().string(); Log.i(TAG,"<======"+Data+"======>"); parseJSON(Data); } }catch (Exception e){ Log.i(TAG,"<=====出现错误=====>"); e.printStackTrace(); } } }).start(); } //打印显示反馈信息 public void parseJSON(String jsonData){ try { JSONObject json = new JSONObject(jsonData); //Log.i(TAG,json.getString("reply").toString()); Backtext.setText(json.getString("reply").toString()); }catch (Exception e){ e.printStackTrace(); } } }
注意事项:
使用到了OkHttp,须要在项目中添加OkHttp库依赖,打开AS中的build.gradle,以下图所示添加
implementation "com.squareup.okhttp3:okhttp:3.11.0"
通信过程当中须要访问网络所以须要为程序添加权限,打开AndroidManifest.xml,以下图所示添加:
<uses-permission android:name="android.permission.INTERNET" />
3.2 服务端代码
@WebServlet("/Servlet") public class Servlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.setContentType("text/json"); String acceptjson = "";//用于存储接收到的信息 String Back="";//用于存储返回的信息 System.out.println("/***********hello***********/"); try{ BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(request.getInputStream() , "utf-8") ); StringBuffer stringBuffersb = new StringBuffer(); String temp; while((temp = bufferedReader.readLine()) != null){ stringBuffersb.append(temp); } bufferedReader.close(); acceptjson = stringBuffersb.toString(); System.out.println("获取到的json格式数据: "+acceptjson); if(acceptjson!=""){ JSONObject json = JSONObject.fromObject(acceptjson); //解析获取数据 String textinfo = json.getString("textinfo"); System.out.println("解析到的数据: "+textinfo); Back = "本地服务端已获取数据: "+textinfo; } }catch(Exception e){ System.out.println("发生未知错误"); e.printStackTrace(); }finally { JSONObject jsonObject = new JSONObject(); jsonObject.put("reply",Back); PrintWriter pw = response.getWriter(); pw.write(jsonObject.toString()); System.out.println("传回的json数据: "+jsonObject.toString()); pw.flush(); pw.close(); System.out.println("/***********world***********/"); } } }
注意事项:
在服务端须要用到如下依赖包,下载后直接放在lib便可。
四 .其余注意事项
在程序书写完毕后,还须要进行如下一些步骤才能够实现两端的通信:
1. 客户端的url目标地址的修改
本程序url的书写格式为
打开控制台,输入 ipconfig/all,找到无线局域网适配器 WLAN下的IPv4 地址
运行服务端代码,先在网页上进行访问,查看是否能够正常访问,而不是显示404。能够正常访问以后再修改客户端中的url。
2. 使用android进行与本地服务端数据传输
若是不使用android虚拟机而是用实体android手机进行数据传输,则须要将电脑与手机处于同一个局域网之下,笔记本电脑与手机链接同一个wifi,或者电脑链接手机热点。