運行結果圖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,或者電腦鏈接手機熱點。