Android+Struts2實現簡單的前後臺交互--Android網路編程

来源:https://www.cnblogs.com/qikeyishu/archive/2018/06/06/9146633.html
-Advertisement-
Play Games

1、下麵測試截圖,基本過程就是:點擊按鈕向伺服器端發送請求,後臺收到請求後給出返回的數據,前臺只需要顯示服務端數據就可以了。例子很簡單能但引發很多思考,博主學了雜七雜八的,這又在來想雜學Android了?……其實是想多瞭解一下其他東西,畢竟博主還在上大學呀!多學點沒什麼不好…… 2、客戶端(Andr ...


1、下麵測試截圖,基本過程就是:點擊按鈕向伺服器端發送請求,後臺收到請求後給出返回的數據,前臺只需要顯示服務端數據就可以了。例子很簡單能但引發很多思考,博主學了雜七雜八的,這又在來想雜學Android了?……其實是想多瞭解一下其他東西,畢竟博主還在上大學呀!多學點沒什麼不好……

2、客戶端(Android)關鍵代碼

MainActivity.java:

 1 package thonlon.example.cn.sendgetdemo;
 2 
 3 import android.inputmethodservice.KeyboardView;
 4 import android.support.v7.app.AppCompatActivity;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.widget.Button;
 8 import android.widget.ScrollView;
 9 import android.widget.TextView;
10 
11 import java.io.IOException;
12 
13 import okhttp3.Call;
14 import okhttp3.Callback;
15 import okhttp3.OkHttpClient;
16 import okhttp3.Request;
17 import okhttp3.Response;
18 
19 public class MainActivity extends AppCompatActivity {
20 
21     private TextView tv;
22     private String mBaseUrl = "http://192.168.43.218:8080/OkHttpGetServer/";
23     @Override
24     protected void onCreate(Bundle savedInstanceState) {
25         super.onCreate(savedInstanceState);
26         setContentView(R.layout.activity_main);
27     }
28 
29     public void doGet(View view) {
30         //拿到okHttpClient對象
31         OkHttpClient okHttpClient = new OkHttpClient();
32         //構造Request
33         Request request = new Request.Builder().get()
34                 .url(mBaseUrl+"login?username=Thanlon&password=123").build();
35 //        將Request封裝成Call
36 //        執行Call
37         okHttpClient.newCall(request).enqueue(new Callback() {
38             @Override
39             public void onFailure(Call call, IOException e) {
40                 e.printStackTrace();
41             }
42 
43             @Override
44             public void onResponse(Call call, Response response) throws IOException {
45                 String res = response.body().string();
46                 showResultInfo(res);
47             }
48         });
49     }
50 
51     private void showResultInfo(final String resultInfo) {
52         tv = (TextView) findViewById(R.id.tv);
53         runOnUiThread(new Runnable() {
54             @Override
55             public void run() {
56                 tv.setText(resultInfo);
57             }
58         });
59     }
60 }

 activity_main.xml:(佈局也發了,做個參考)

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:layout_height="match_parent"
    tools:context="thonlon.example.cn.sendgetdemo.MainActivity">

    <Button
        android:id="@+id/btn_send"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:onClick="doGet"
        android:text="向伺服器端發送請求(這裡以Get請求作為示例)"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintVertical_bias="0.097" />

</android.support.constraint.ConstraintLayout>

3、伺服器端主要代碼

UserLoginAction.java:(Servlet自然也可以,這裡藉助了strut2框架)

 1 package com.okhttp;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.security.auth.message.callback.PrivateKeyCallback.Request;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 import org.apache.struts2.ServletActionContext;
10 
11 import com.opensymphony.xwork2.ActionSupport;
12 
13 public class UserLoginAction extends ActionSupport {
14 
15     private String username;
16     private String password;
17 
18     public String login() throws IOException {
19 //        System.out.println(username+ "," + password);
20         HttpServletResponse response = ServletActionContext.getResponse();
21         response.setCharacterEncoding("utf-8");  //防止服務端發送到到客戶端的數據出現中文亂碼
22         PrintWriter pw = response.getWriter();
23         pw.write("下麵是伺服器端返回的數據:\n\n");
24         pw.write("您提交的用戶名是:"+username);
25         pw.flush();
26         return null;
27     }
28 
29     public String getUsername() {
30         return username;
31     }
32 
33     public void setUsername(String username) {
34         this.username = username;
35     }
36 
37     public String getPassword() {
38         return password;
39     }
40 
41     public void setPassword(String password) {
42         this.password = password;
43     }
44 }

 struts.xml:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 4     "http://struts.apache.org/dtds/struts-2.0.dtd">
 5 <struts>
 6     <package name="default" namespace="/" extends="struts-default">
 7         <action name="login" class="com.okhttp.UserLoginAction" method="login">
 8         </action>
 9     </package>
10 </struts>

附:個人網站www.nxl123.cn(後臺採用Python Flask框架搭建,2019年1月1日將升級完成並正式啟用。哎,本人還是學生狗呢!網站做的不好多多提點意見和建議吧,別罵我就好!嘿嘿……以後SEO什麼的還得多向大家學習……)


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

-Advertisement-
Play Games
更多相關文章
  • 實驗案例一:驗證索引的作用 1、首先創建一個數據量大的表,名稱為“學生表”,分別有三列,學號,姓名和班級,如下圖所示,學號為自動編號,班級為預設值“一班”。 2、向表中插入大量數據,數據越多,驗證索引的效果越好。 使用語句完成:While 1>0 Insert into 學生表(姓名) values ...
  • 數據中心是智慧保護區的信息倉庫,為整個信息化平臺的高效運營提供豐富的數據源,全面支撐保護區各項應用。數據中心主要是通過保護區基礎資料庫建設工程的實施,通過規範生物多樣性信息分類、採集存儲、處理、交換和服務的標準,建成基礎資料庫。按照統一標準、共建共用、互聯互通的原則,以高端、集約、安全為目標,加強林 ...
  • 佛曰:“不可說,說既是錯”,所以本篇也是錯! 技術人的世界是一塊凈土,也許世界並不該這麼複雜。 ——KK 這篇感悟也許帶著些許悲涼、無奈,也許又帶著激情滿滿,也許還透著辛酸。 技術男 很多人眼裡的技術宅是[傻傻的] [情商低的] [不愛說話的][邋遢的]....當然也有一些好詞 [踏實] [誠實] ...
  • Kafka中存在大量的延遲操作,比如延遲生產、延遲拉取以及延遲刪除等。Kafka並沒有使用JDK自帶的Timer或者DelayQueue來實現延遲的功能,而是基於時間輪自定義了一個用於實現延遲功能的定時器(SystemTimer)。JDK的Timer和DelayQueue插入和刪除操作的平均時間複雜 ...
  • today,i'll using the open source tool named "binlog2sql" which is release by danfengchao to do some flashback test. here's the github address:https:// ...
  • 隨機查詢,方法可以有很多種。比如,查詢出所有記錄,然後隨機從列表中取n條記錄。使用程式便可實現。可是程式實現必須查詢出所有符合條件的記錄(至少是所有符合條件的記錄id),然後再隨機取出n個id,查詢資料庫。但是效率畢竟沒有資料庫中直接查詢得快。下麵介紹mysql中怎樣隨機查詢n條記錄。 1.最簡單的 ...
  • since i've broken down the replication enviornment by "reset master;" yesterday.therefore,i'd like to reconfigure it again,there're several simple ste ...
  • 效果: PagerData類: PagerFragment類: PagerActivity: fragment_pager: activity_pager: ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...