Android基礎_web通信2

来源:https://www.cnblogs.com/Crezy/archive/2017/12/26/8118159.html
-Advertisement-
Play Games

一.移動客服端實現對PC端數據的操作 在PC端模擬一個資料庫,實現用戶的增刪改查,然後在移動客服端實現對PC端資料庫的操作 在PC端建立三個表 用戶表(Users),員工表(Emp), 部門表(Dept), User表對應欄位,並設置對應的set/get方法,這裡不一一寫出 Emp表對應欄位 Dep ...


一.移動客服端實現對PC端數據的操作

在PC端模擬一個資料庫,實現用戶的增刪改查,然後在移動客服端實現對PC端資料庫的操作

在PC端建立三個表

用戶表(Users),員工表(Emp), 部門表(Dept),

User表對應欄位,並設置對應的set/get方法,這裡不一一寫出

    private int uno;
    private String uname;
    private String upwd;

 

Emp表對應欄位

    private int eno;
    private String ename;
    private int eage;
    private String esex;
    private Date eintime;

 

Dept表對應欄位

    private int dno;
    private String dname;

 

對資料庫的模擬操作:

pc端代碼:

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.entity.Users;
import com.google.gson.Gson;

/**
 * 處理Users相關請求的控制類
 */
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    //定義一個集合,初始化一些用戶
    private List<Users> userList;
    
    public UserServlet() {
        super();
        userList=new ArrayList<Users>();
        userList.add(new Users(1, "admins", "admins"));
        userList.add(new Users(2, "jack", "000000"));
        userList.add(new Users(3, "lucy", "000000"));
        userList.add(new Users(4, "toms", "000000"));
        userList.add(new Users(5, "join", "000000"));
    }
    
    //所有來到UserServlet的請求都將進入service中進行分發
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");
        //獲取用戶要請求的方法
        String method=request.getParameter("method");
        switch(method){
            case "login":
                doLogin(request, response);
                break;
            case "register":
                doRegister(request, response);
                break;
            case "userList":
                doFindUserList(request, response);
                break;
            case "userById":
                doFindUserById(request, response);
                break;
            case "updateUser":
                doUpdateUser(request, response);
                break;
            case "deleteUser":
                doDeleteUser(request, response);
                break;
        }
    }

    //用戶登錄
    protected void doLogin(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收用戶傳遞的參數
        String name=request.getParameter("uname");
        String pwd=request.getParameter("upwd");
        
        PrintWriter out=response.getWriter();
        for (Users users : userList) {
            if(users.getUname().equals(name)&&users.getUpwd().equals(pwd)){
                out.println("用戶登錄成功");
                return;
            }
        }
        out.print("用戶名和密碼錯誤");
        out.close();
    }

    //添加用戶
    protected void doRegister(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("----------進入添加用戶操作----------");
        //接收用戶傳遞的參數
        String name=request.getParameter("uname");
        String pwd=request.getParameter("upwd");
        
        //將信息封裝成一個Users對象
        userList.add(new Users(userList.size()+1, name, pwd));
        PrintWriter out=response.getWriter();
        out.println("用戶"+name+"添加成功");
        out.close();        
    }
    
    //查詢所有用戶
    protected void doFindUserList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        //將所有用戶以JSON格式響應到客戶端
        out.println(new Gson().toJson(userList));
        out.close();        
    }
    
    //根據Id查詢單個用戶
    protected void doFindUserById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        //取出ID
        int id=Integer.parseInt(request.getParameter("uno"));
        for (Users users : userList) {
            if(users.getUno()==id){
                out.println(new Gson().toJson(users));
                return;
            }
        }
        out.close();
    }
    
    //修改用戶
    protected void doUpdateUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int id=Integer.parseInt(request.getParameter("uno"));
        String name=request.getParameter("uname");
        String pwd=request.getParameter("upwd");
        
        PrintWriter out=response.getWriter();
        for (Users users : userList) {
            if(users.getUno()==id){
                users.setUname(name);
                users.setUpwd(pwd);
                out.println(new Gson().toJson("修改用戶成功"));
                return;
            }
        }
        out.println(new Gson().toJson("修改用戶失敗"));
        out.close();
    }
    
    //刪除用戶
    protected void doDeleteUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int id=Integer.parseInt(request.getParameter("uno"));
        PrintWriter out=response.getWriter();
        for (Users users : userList) {
            if(users.getUno()==id){
                userList.remove(users);
                out.println(new Gson().toJson("刪除用戶成功"));
                return;
            }
        }
        out.println(new Gson().toJson("刪除用戶失敗"));
        out.close();
    }

}

HTML頁面 :

用戶登錄代碼:<a href="http://localhost:8080/Web_Project/UserServlet?method=login&uname=xiaolin&upwd=000000">用戶登錄</a><br/><br/>,傳參其他的相同

PC端對數據的操作完成。

手機客服端代碼:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import com.example.utils.CallBack;
import com.example.utils.FileUtils;
import com.example.utils.HttpUtils;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    //用戶登錄(自帶模擬器:10.0.2.2,Genymotion:本地IP)
    public void doLogin(View view){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
//192.168.3.183需要改成你的本地IP地址,下麵的都需要改成你本地的IP地址 URL url
=new URL("http://192.168.3.183:8080/Web_Project/UserServlet?method=login&uname=xiaolin&upwd=000000"); HttpURLConnection conn=(HttpURLConnection) url.openConnection(); conn.connect(); //獲取結果 InputStream input=conn.getInputStream(); final String result= FileUtils.formatStreamToString(input); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show(); } }); } catch (Exception e) { e.printStackTrace(); } } }).start(); } //添加用戶 public void doRegister(View view){ new Thread(new Runnable() { @Override public void run() { try { URL url=new URL("http://192.168.3.183:8080/Web_Project/UserServlet"); HttpURLConnection conn=(HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST");//以POST方式傳值 conn.setDoOutput(true);//允許向伺服器傳遞參數,預設false conn.connect(); //向伺服器傳遞數據java.net.URLEncoder.encode("","utf-8"); String data="method=register&uname=xiaolin&upwd=123456"; OutputStream out=conn.getOutputStream(); out.write(data.getBytes()); out.close(); //獲取結果 InputStream input=conn.getInputStream(); final String result= FileUtils.formatStreamToString(input); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show(); } }); } catch (Exception e) { e.printStackTrace(); } } }).start(); } //查詢所有用戶 public void doFindUserList(View view){ new Thread(new Runnable() { @Override public void run() { try { URL url=new URL("http://192.168.3.183:8080/Web_Project/UserServlet?method=userList"); HttpURLConnection conn=(HttpURLConnection)url.openConnection(); conn.connect(); //直接將返回的流轉換為一個字元串 String result=FileUtils.formatStreamToString(conn.getInputStream()); //如何解析一個JSON字元串 final JSONArray array=new JSONArray(result); runOnUiThread(new Runnable() { @Override public void run() { for(int i=0;i<array.length();i++){ try { JSONObject obj=array.getJSONObject(i); String msg="用戶名:"+obj.getString("uname")+",密碼:"+obj.getString("upwd"); Toast.makeText(getApplicationContext(),msg, Toast.LENGTH_SHORT).show(); } catch (JSONException e) { e.printStackTrace(); } } } }); } catch (Exception e) { e.printStackTrace(); } } }).start(); } //查詢單個用戶 public void doFindUserById(View view){ new Thread(new Runnable() { @Override public void run() { try { URL url=new URL("http://192.168.3.183:8080/Web_Project/UserServlet?method=userById&uno=1"); HttpURLConnection conn=(HttpURLConnection)url.openConnection(); conn.connect(); //直接將返回的流轉換為一個字元串 String result=FileUtils.formatStreamToString(conn.getInputStream()); //如何解析一個JSON字元串 final JSONObject obj=new JSONObject(result); runOnUiThread(new Runnable() { @Override public void run() { String msg= null; try { msg = "用戶名:"+obj.getString("uname")+",密碼:"+obj.getString("upwd"); Toast.makeText(getApplicationContext(),msg, Toast.LENGTH_SHORT).show(); } catch (JSONException e) { e.printStackTrace(); } } }); } catch (Exception e) { e.printStackTrace(); } } }).start(); } //更新用戶 public void doUpdateUser(View view){ new Thread(new Runnable() { @Override public void run() { try { URL url=new URL("http://192.168.3.183:8080/Web_Project/UserServlet"); HttpURLConnection conn=(HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST");//以POST方式傳值 conn.setDoOutput(true);//允許向伺服器傳遞參數,預設false conn.connect(); //向伺服器傳遞數據java.net.URLEncoder.encode("","utf-8"); String data="method=updateUser&uno=6&uname=xiaolin&upwd=111111"; OutputStream out=conn.getOutputStream(); out.write(data.getBytes()); out.close(); //獲取結果 InputStream input=conn.getInputStream(); final String result= FileUtils.formatStreamToString(input); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(),result.toString(), Toast.LENGTH_SHORT).show(); } }); } catch (Exception e) { e.printStackTrace(); } } }).start(); } //刪除用戶 public void doDeleteUser(View view){ try { URL url=new URL("http://192.168.3.183:8080/Web_Project/UserServlet"); String data="method=deleteUser&uno=6"; HttpUtils.doPost(url, data, new CallBack() { @Override public void success(final String str) { runOnUI(str); } @Override public void failed(final String str) { runOnUI(str); } }); } catch (MalformedURLException e) { e.printStackTrace(); } } public void addEmp(View view){ try { URL url=new URL("http://192.168.3.183:8080/Web_Project/EmpServlet"); String data="method=addEmp&ename=小明&eage=21&esex=男&eintime=2017-7-8&dno=1"; HttpUtils.doPost(url, data, new CallBack() { @Override public void success(final String str) { runOnUI(str); } @Override public void failed(final String str) { runOnUI(str); } }); } catch (MalformedURLException e) { e.printStackTrace(); } } public void findEmpList(View view){ try { URL url=new URL("http://192.168.3.183:8080/Web_Project/EmpServlet?method=empList"); HttpUtils.doGet(url,null, new CallBack() { @Override public void success(final String str) { try { final JSONArray array=new JSONArray(str); for(int i=0;i<array.length();i++){ JSONObject obj=array.getJSONObject(i); JSONObject dept=obj.getJSONObject("dept"); String empInfo="員工姓名"+obj.getString("ename")+",部門:"+dept.getString("dname"); runOnUI(empInfo); } } catch (JSONException e) { e.printStackTrace(); } } @Override public void failed(final String str) { runOnUI("查詢失敗"); } }); } catch (MalformedURLException e) { e.printStackTrace(); } } private void runOnUI(final String str){ runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(),str, Toast.LENGTH_SHORT).show(); } }); } }

 

工具類:
FileUtils
public class FileUtils {

    //將一個輸入流轉換為一個字元串
    public static String formatStreamToString(InputStream stream){
        if(stream!=null){
            ByteArrayOutputStream out=new ByteArrayOutputStream();
            byte[] bytes=new byte[1024];
            int len=0;
            try {
                while((len=stream.read(bytes))!=-1){
                    out.write(bytes,0,len);
                }
                String str=out.toString();
                out.flush();
                out.close();
                stream.close();
                return str;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    //執行下載文件到指定位置
    public static void downLoadFile(final String fromPath, final String savePath, final CallBack callBack){
        if(fromPath!=null&&savePath!=null){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        URL url=new URL(fromPath);
                        HttpURLConnection conn=(HttpURLConnection) url.openConnection();
                        conn.setConnectTimeout(20*1000);
                        conn.connect();
                        InputStream input=conn.getInputStream();
                        File file=new File(savePath);
                        if(!file.getParentFile().exists())
                            file.getParentFile().mkdirs();
                        OutputStream out=new FileOutputStream(file);
                        byte[] bytes=new byte[1024];
                        for(int len=0;(len=input.read(bytes))!=-1;){
                            out.write(bytes,0,len);
                        }
                        out.flush();
                        out.close();
                        input.close();
                        callBack.success(null);//下載成功
                    } catch (Exception e) {
                        e.printStackTrace();
                        callBack.failed(null);//下載失敗
                    }
                }
            }).start();
        }
    }

    public static boolean existsFile(String path){
        if(path!=null&&path.length()>0) {
            File file = new File(path);
            if(file.exists())
                return true;
        }
        return false;
    }
}

 


HttpUtils
public class HttpUtils {

    public static void doPost(final URL url, final String data, final CallBack callBack){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    HttpURLConnection conn=(HttpURLConnection)url.openConnection();
                    conn.setRequestMethod("POST");
                    conn.setConnectTimeout(10*1000);
                    conn.setDoOutput(true);
                    conn.setUseCaches(false);
                    conn.setInstanceFollowRedirects(true);
                    conn.connect();
                    if(data!=null&&data.length()>0){
                        OutputStream out=conn.getOutputStream();
                        out.write(data.getBytes());
                        out.close();
                    }
                    callBack.success(FileUtils.formatStreamToString(conn.getInputStream()));
                } catch (IOException e) {
                    e.printStackTrace();
                    callBack.failed("操作出錯");
                }

            }
        }).start();
    }

    public static void doGet(final URL url,final String data,final CallBack callBack){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    HttpURLConnection conn=(HttpURLConnection)url.openConnection();
                    conn.setRequestMethod("GET");
                    conn.setConnectTimeout(10*1000);
                    conn.setDoOutput(true);
                    conn.setInstanceFollowRedirects(true);
                    conn.connect();
                    if(data!=null&&data.length()>0){
                        OutputStream out=conn.getOutputStream();
                        out.write(data.getBytes());
                        out.close();
                    }
                    callBack.success(FileUtils.formatStreamToString(conn.getInputStream()));
                } catch (IOException e) {
                    e.printStackTrace();
                    callBack.failed("操作出錯");
                }

            }
        }).start();
    }
}

 

CallBack
public interface CallBack {

    public void success(String str);
    public void failed(String str);
}
界面:

手機客服端代碼完成。


 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用mysql資料庫的朋友, 經常會使用mysqldump備案資料庫, 然後到新伺服器還原, 這個過程中, 有朋友會遇到ERROR 1046 (3D000) No database selected的提示, 這個原因是沒有在命令中指定對應的資料庫。 解決的方法也很簡單, 假設mysqldump備案的 ...
  • 一、 Oracle自動備份單表一個月數據 方式一:三步處理(建批處理文件,寫sql文件,設置任務計劃) 1、 第一步:建立一個批處理文件 2、 第二步、寫清除資料庫並釋放空間的sql文件 3、 第三步、使用windows自帶的任務計劃程式 A) 打開任務計劃程式,新建一個基本任務計劃 B) 填上名和 ...
  • [20171225]查看並行執行計劃註意的問題.txt--//如果使用dbms_xplan.display_cursor查看並行執行計劃註意一些問題,通過例子說明:1.環境:SCOTT@book> @ &r/ver1PORT_STRING VERSION BANNER x86_64/Linux 2. ...
  • MySQL事務 MySQL事務主要用於處理操作量大,複雜度高的數據。 比如說,在人員管理系統中,你刪除一個人員,你既需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這些資料庫操作語句就構成一個事務。 (1)在MySQL中只有使用了Innodb資料庫引擎的資料庫或表才支持事務。  ...
  • 概要 react native 環境搭建 hello react native react native 發佈 react native 優勢 1. 不用再學習 OC,Swift,Java,Kotlin 等 2. 復用 react 開發的種種好處 3. 開發體驗好(即時編譯) 4. 編譯出來的是原生 ...
  • 幾天前去物管交物業費,物管工作人員說小區引進高新產品,使用銀行卡消費後,不需要拿筆在銀聯機上簽名,直接用手指觸摸實現消費簽名,當時心想,果然是高科技,機子外形如下左圖,簽名如下右圖。 仔細一看,其實就是一個觸摸屏,用戶在上面直接手動簽名,實現這個功能其實並不複雜,我們自定義一個控制項,繼承view,使 ...
  • 解決方法: 修改這個文件 assets/data/dcloud_control.xml <msc version="1.9.9.39354" debug="true"><apps><app appid="yourapp" appver="1.0.3"/></apps></msc> 設置debug就可 ...
  • 在接入FaceBook第三方登錄的時候,需要獲取Android Hash Key。 Android Hash Key即密鑰散列有兩種,一種是開發秘鑰散列,一種是發佈秘鑰散列。這裡主要介紹如何獲取開發秘鑰散列Debug Android Hash Key。 步驟如下: 1、到https://code.g ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...