python與android交互,Android客戶端與Python服務器端的簡單通信

最近在做一個APP,需要與服務器通信,一點一點的嘗試,記錄一下。

本文使用了OkHttp和Flask框架。

Android客戶端:

實現功能輸入完點擊OK按鈕后會toast成功的信息。

fee8e5f79b96f5520908fd3aa7ac2473.png

3b67baeb24743b800a468b353835833d.png

Python服務端:

e1e75cb3a44143cc6562c80af40055c6.png

各部分代碼如下:

activity_main.xml:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity">

android:id="@+id/username"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="20dp"

android:hint="username" />

android:id="@+id/password"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="10dp"

android:hint="password" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:layout_marginTop="10dp"

android:id="@+id/ok"

android:text="ok" />

為了使用OkHttp,需要在build.gradle中添加:implementation 'com.squareup.okhttp3:okhttp:3.11.0'

MainActivity.java:

package com.example.vesper.userpwd;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

import java.io.IOException;

import okhttp3.Call;

import okhttp3.Callback;

import okhttp3.FormBody;

import okhttp3.OkHttpClient;

import okhttp3.Request;

import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

private Button ok;

private EditText username;

private EditText password;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ok = findViewById(R.id.ok);

username = findViewById(R.id.username);

password = findViewById(R.id.password);

ok.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

String name = String.valueOf(username.getText());

String pass = String.valueOf(password.getText());

String url = "http://192.168.xxx.xxx:5000/register";//替換成自己的服務器地址

SendMessage(url, name, pass);

}

});

}

private void SendMessage(String url, final String userName, String passWord) {

OkHttpClient client = new OkHttpClient();

FormBody.Builder formBuilder = new FormBody.Builder();

formBuilder.add("username", userName);

formBuilder.add("password", passWord);

Request request = new Request.Builder().url(url).post(formBuilder.build()).build();

Call call = client.newCall(request);

call.enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

runOnUiThread(new Runnable() {

@Override

public void run() {

runOnUiThread(new Runnable() {

@Override

public void run() {

Toast.makeText(MainActivity.this, "服務器錯誤", Toast.LENGTH_SHORT).show();

}

});

}

});

}

@Override

public void onResponse(Call call, final Response response) throws IOException {

final String res = response.body().string();

runOnUiThread(new Runnable() {

@Override

public void run() {

if (res.equals("0")) {

runOnUiThread(new Runnable() {

@Override

public void run() {

Toast.makeText(MainActivity.this, "該用戶名已被注冊", Toast.LENGTH_SHORT).show();

}

});

} else {

runOnUiThread(new Runnable() {

@Override

public void run() {

Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();

}

});

}

}

});

}

});

}

}

服務器端:userpwd.py:

from flask import Flask

from flask import request

import os

app = Flask(__name__)

@app.route('/')

def test():

return '服務器正常運行'

#此方法處理用戶注冊

@app.route('/register',methods=['POST'])

def register():

username=request.form['username']

password=request.form['password']

print('username:'+username)

print('password:'+password)

return '注冊成功'

if __name__ == '__main__':

app.run(host='0.0.0.0')

遇到的問題:

1.一開始總是通信不上,提示服務器錯誤,原來是因為沒有增加一條權限:

Android客戶端與Python服務器端通信之上傳圖片

繼上篇成功的與服務器端通信上之后,我現在需要將安卓本地的圖片上傳到服務端.服務端接收圖片存下來. 參考:https://blog.csdn.net/qq_26906345/article/detail ...

Android客戶端與Eclipse服務器端的Socket通信

Server端代碼 用來實現客戶端socket的監聽 package MyServer; import java.io.BufferedReader; import java.io.BufferedW ...

android 客戶端支付寶 php服務器端編寫

生成私鑰 輸入“genrsa -out rsa_private_key.pem 1024”命令,回車后,在當前 bin 文件目 錄中會新增一個 rsa_private_key.pem 文件,其文件為原 ...

Android中兩個Activity之間簡單通信

在Android中,一個界面被稱為一個activity,在兩個界面之間通信,采用的是使用一個中間傳話者(即Intent類)的模式,而不是直接通信. 下面演示如何實現兩個activity之間的通信. 信 ...

Socket 通信原理(Android客戶端和服務器以TCP&&UDP方式互通)

轉載地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有關通信原理內容是在網上或百科整理得到,代碼部分為本人所寫,如果不當 ...

Android客戶端與數據庫交互數據的簡單學習

?? 數據庫整理方案如下: 一.Android+ webservices+SQLServer? : 通過webservices客戶端向指定服務器發送請求,服務器響應返回指定格式的數據,如json或者x ...

Python網絡編程-Socket簡單通信(及python實現遠程文件發送)

學習python中使用python進行網絡編程,編寫簡單的客戶端和服務器端進行通信,大部分內容來源于網絡教程,這里進行總結供以后查閱. 先介紹下TCP的三次握手: 1,簡單的發送消息: 服務器端: i ...

Android客戶端和服務器端數據交互

網上有很多例子來演示Android客戶端和服務器端數據如何實現交互不過這些例子大多比較繁雜,對于初學者來說這是不利的,現在介紹幾種代碼簡單.邏輯清晰的交互例子,本篇博客介紹第四種: 一.服務器端: 代 ...

socket 通信 入門3 android 客戶端 C# 服務端

這是一個android端操控服務器的例子 ?就是發送簡單指令到服務器 ?然后服務器響應什么的... 當然這里是未完成的 ?只是簡單展示一下大致思路 首先連接建立起來后 ?服務端給客戶端一條信息 ?告訴 ...

隨機推薦

oracle正則表達式的用法

Oracle 正則表達式函數-REGEXP_SUBSTR 使用例子 .5個參數 第一個是輸入的字符串 第二個 ...

修改Broforce無限人數,死亡不減反加

看B站直播發現這個有趣的游戲,找了半天修改器無效,Cheat Engine怎么找指針有點忘了,直接找數值每關都要重來,想來想去還是簡單粗暴的反編譯好了. 順便做下C#反編譯備忘. 首先把DLL反成IL ...

AWS Summit 2014 San Francisco站總結

我上個月去San Francisco參加了AWS Summit 2014 會議,總結一下參加這個會議的情況. 什么是AWS Summit? AWS Summit 是AWS在全球各地舉辦的,針對AWS用 ...

Tarjan+模板

#include #include #include #include #in ...

Flash上傳組件之SWFUpload文件上傳

一.什么是SWFUpload? SWFUpload是一個客戶端文件上傳工具,最初由Vinterwebb.se開發,它通過整合Flash與JavaScript技術為WEB開發者提供了一個具有豐富功能繼而 ...

JS操作DOM元素屬性和方法

Dom元素基本操作方法API,先記錄下,方便以后使用. W3C DOM和JavaScript很容易混淆不清.DOM是面向HTML和XML文檔的API,為文檔提供了結構化表示,并定義了如何通過腳本來訪 ...

---添加一條記錄返回一條記錄的ID

INSERT INTO Web_AD(PID,ADType,ADTitle,ADTitle1,ADTitle2,ADTarget,LinkURL,DispalyWords,ADCode,UploadI ...

分享到QQ空間、新浪微博、騰訊微博和人人網

function shareys(type, url, title, img, content) { switch (type) { case "sina": url = &quo ...

The Beam Model:Stream & Tables翻譯(上)

本文由??網易云發布. 作者:周思華 本篇文章僅限內部分享,如需轉載,請聯系網易獲取授權. 本文嘗試描述Beam模型和Stream & Table理論間的關系(前者描述于數據流模型論文.the ...

一文入門HTML5

1.HTML5 上節回顧:一文讀懂ES6(附PY3對比) | 一文入門NodeJS 演示demo:https://github.com/lotapp/BaseCode/tree/master/java ...

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452482.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452482.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452482.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

結構程序設計

結構程序設計經典定義:如果一個程序的代碼塊僅僅通過順序、選擇和循環這3種基本控制結構進行連接,并且每個代碼塊只有一個入口和一個出口,則稱這個程序是結構化的。 結構程序設計更全面的定義:結構程序設計是盡可能少用GO TO語句…

Sql Server 開窗函數Over()的使用

利用over(),將統計信息計算出來,然后直接篩選結果集1 declare t table(2 ProductID int,3 ProductName varchar(20),4 ProductType varchar(20),5 Price int)6 7 insert t8 select 1,name1,P1,3 union all9 select 2,name2,P1,5 union all 10 select 3,…

云棲科技評論第48期:前沿科技對世界的改造 我們這代人只完成了1%

1、數字經濟版圖呈中美雙分趨勢 日本IT行業為前景擔憂 數字經濟版圖呈中美雙分趨勢 日本IT行業為前景擔憂 【新聞摘要】《日本經濟新聞》日前刊文稱,數字經濟的勢力版圖呈現中國和美國兩強雙分的趨勢明顯,這意味著日本可能不得不使用中美的技術&#xff…

程序員犯的非技術錯誤(Top 5)

對于程序開發者來說,有兩種技術需要我們掌握,一個是技術上的能力,另一個是非技術上的能力。不幸的是,許多程序員過多地關注了技術上的能力,而忽略了非技術上的能力的培養,因此,我們的程序員們經…

CentOS下添加Root權限用戶‘超級用戶’方法(xxx is not in the sudoers file.This incident will be reported.的解決方法)

文章目錄1.添加普通用戶2.添加sudo文件的寫權限3.編輯sudoers文件4.撤銷sudoers文件寫權限1.添加普通用戶 [rootserver ~]# useradd fxd //添加一個名為fxd的用戶 [rootserver ~]# passwd fxd //修改密碼 Changing password for user chenjiafa. New UNIX password: //在這里輸…

android打印intent flag,Android flag詳解

Android flag詳解Android flag詳解一.Flag標志位在閱讀源碼的時候經常發現有一些標志屬性使用一些位操作來判斷是否具有該標志,增加標志或者去除標志。如:二.addFlags (int flags)和setFlags (int flags)區別Public Intent addFlags (int flags)增加額外…

人機界面設計

1.系統響應時間 系統響應時間指從用戶完成某個控制動作(例如,按回車鍵或單擊鼠標),到軟件給出預期的響應(輸出信息或做動作)之間的這段時間。 系統響應時間有兩個重要屬性,分別是長度和易變性。 1)長度:時間過長&#…

GeoHash資料

geohash基本原理 轉載于:https://www.cnblogs.com/hyl8218/p/9111410.html

開啟市場新格局 且看新華三計算與存儲新品發布會

全球領先的新IT解決方案領導者新華三將于8月31日在北京釣魚臺國賓館舉辦“新IT 新動能 新格局 新華三下一代計算與存儲發布會”,重磅發布服務器和存儲的全線新品。 2017年初,新華三集團正式推出了“應用驅動 云領未來”的新IT戰略。在這一戰略指引下&…

Centos7更新 SQLite3至版本3.29.0

文章目錄1.創建 src 目錄并進到這個目錄2.下載 sqlite3 源碼并解壓安裝3.替換系統低版本 sqlite31.創建 src 目錄并進到這個目錄 fxd用戶下: mkdir -p ~/src cd ~/src 2.下載 sqlite3 源碼并解壓安裝 fxd用戶下: wget https://sqlite.org/2019/sqlite…

開發人員必學的5門課程

越來越多的Web開發人員通常都會問一些同樣的問題。比如:哪一種開發語言最重要?初級開發人員的薪金會是多少?公司提供的免費培訓有用嗎?如何評估一個新的項目?盡管這些問題都很重要,但是開發人員往往對其他人…

android 響應類型,android – Retrofit 2 RxJava – Gson – “全局”反序列化,更改響應類型...

正如Than所說,使用攔截器的解決方案并不是那么好.我已經設法用一個Rx變壓器來解決這個問題.我還添加了自定義api異常,當出現問題時我可以拋出它并在onError中輕松處理它.我認為它更強大.響應包裝器:public class ApiResponse {private boolean success;private T da…

龜兔賽跑問題

題目 烏龜與兔子進行賽跑,跑場是一個矩型跑道,跑道邊可以隨地進行休息。烏龜每分鐘可以前進3米,兔子每分鐘前進9米;兔子嫌烏龜跑得慢,覺得肯定能跑贏烏龜,于是,每跑10分鐘回頭看一下烏龜&#x…

過程設計的工具

描述程序處理過程的工具稱為過程設計工具,它可以分為圖形、表格和語言3類。不論是那類工具,對他們的基本要求都是提供對設計 無歧義的描述,也就是應該能夠指明控制流程、處理功能、數據組織以及其他方面的實現細節。從而在編碼階段能夠把對應…

Centos7中安裝python3.7、pip3以及pipenv(親測有效)

文章目錄1.安裝python3.7以及pip32.使用pip3安裝pipenv時pip報錯3.使用pip3安裝pipenv時出現ReadTimeoutError4.查看pipenv版本報錯1.安裝python3.7以及pip3 1)首先來安裝依賴 yum -y install gcc gcc-c yum -y groupinstall “Development tools” yum install openssl-deve…

成功人士都是這樣逼出來的

研究過很多很多成功人士的成才之路,發現這些人和我們普通人其實沒有什么區別,不過,這些人用老祖宗的話說是“天將降大任于斯人也,必將苦其心志,勞其筋骨,餓其體膚,空乏其身,所以動心…

Linux下網卡綁定模式

Linux bonding驅動一共提供了7種模式,它們分別是:balance-rr 、active-backup、balance-xor、broadcast、802.3ad、balance-tlb、balance-alb。 balance-rr or 0:輪詢模式,提供負載平衡和容錯。該模式下兩個網口都工作 active-…

Unity4.6證書激活問題

第一次運行的激活問題安裝好Unity4.6之后首次啟動會自動連網,但是會出現error loading page錯誤,SSL peer certificate or SSH remote key was not OK。如下圖所示: 點OK就退出了。再啟動一遍也是一樣的。 這時可以先暫時斷一下網&#xff0c…

Readhat中掛載yum源

文章目錄1.鏈接物理鏡像2.查看原始掛載目錄3.掛載4.新建iso.repo5.查看掛載目錄1.鏈接物理鏡像 vmware控制臺中,勾選設備狀態成“已連接”,會在桌面生成鏡像圖標。 2.查看原始掛載目錄 輸入以下指令: [rootlocalhost ~]# df -h Filesystem…

面向數據結構設計的基本思想

Jackson 方法的軟件設計過程是從數據結構入手,由數據結構之間的關系導出程序結構,這使軟件系統的開發“有章可循”。尤其這一方法特別適合于以數據為主,“計算”較簡單的數據處理系統。因此可稱其為“面向數據的方法”。由于這一技術未提供對…