android移動端向本地服務端的傳送數據

 

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

相關文章
相關標籤/搜索