python与android交互,Android客户端与Python服务器端的简单通信
最近在做一個(gè)APP,需要與服務(wù)器通信,一點(diǎn)一點(diǎn)的嘗試,記錄一下。
本文使用了OkHttp和Flask框架。
Android客戶端:
實(shí)現(xiàn)功能輸入完點(diǎn)擊OK按鈕后會(huì)toast成功的信息。
Python服務(wù)端:
各部分代碼如下:
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";//替換成自己的服務(wù)器地址
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, "服務(wù)器錯(cuò)誤", 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, "該用戶名已被注冊(cè)", Toast.LENGTH_SHORT).show();
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();
}
});
}
}
});
}
});
}
}
服務(wù)器端:userpwd.py:
from flask import Flask
from flask import request
import os
app = Flask(__name__)
@app.route('/')
def test():
return '服務(wù)器正常運(yùn)行'
#此方法處理用戶注冊(cè)
@app.route('/register',methods=['POST'])
def register():
username=request.form['username']
password=request.form['password']
print('username:'+username)
print('password:'+password)
return '注冊(cè)成功'
if __name__ == '__main__':
app.run(host='0.0.0.0')
遇到的問題:
1.一開始總是通信不上,提示服務(wù)器錯(cuò)誤,原來是因?yàn)闆]有增加一條權(quán)限:
Android客戶端與Python服務(wù)器端通信之上傳圖片
繼上篇成功的與服務(wù)器端通信上之后,我現(xiàn)在需要將安卓本地的圖片上傳到服務(wù)端.服務(wù)端接收?qǐng)D片存下來. 參考:https://blog.csdn.net/qq_26906345/article/detail ...
Android客戶端與Eclipse服務(wù)器端的Socket通信
Server端代碼 用來實(shí)現(xiàn)客戶端socket的監(jiān)聽 package MyServer; import java.io.BufferedReader; import java.io.BufferedW ...
android 客戶端支付寶 php服務(wù)器端編寫
生成私鑰 輸入“genrsa -out rsa_private_key.pem 1024”命令,回車后,在當(dāng)前 bin 文件目 錄中會(huì)新增一個(gè) rsa_private_key.pem 文件,其文件為原 ...
Android中兩個(gè)Activity之間簡(jiǎn)單通信
在Android中,一個(gè)界面被稱為一個(gè)activity,在兩個(gè)界面之間通信,采用的是使用一個(gè)中間傳話者(即Intent類)的模式,而不是直接通信. 下面演示如何實(shí)現(xiàn)兩個(gè)activity之間的通信. 信 ...
Socket 通信原理(Android客戶端和服務(wù)器以TCP&;&;UDP方式互通)
轉(zhuǎn)載地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有關(guān)通信原理內(nèi)容是在網(wǎng)上或百科整理得到,代碼部分為本人所寫,如果不當(dāng) ...
Android客戶端與數(shù)據(jù)庫(kù)交互數(shù)據(jù)的簡(jiǎn)單學(xué)習(xí)
?? 數(shù)據(jù)庫(kù)整理方案如下: 一.Android+ webservices+SQLServer? : 通過webservices客戶端向指定服務(wù)器發(fā)送請(qǐng)求,服務(wù)器響應(yīng)返回指定格式的數(shù)據(jù),如json或者x ...
Python網(wǎng)絡(luò)編程-Socket簡(jiǎn)單通信(及python實(shí)現(xiàn)遠(yuǎn)程文件發(fā)送)
學(xué)習(xí)python中使用python進(jìn)行網(wǎng)絡(luò)編程,編寫簡(jiǎn)單的客戶端和服務(wù)器端進(jìn)行通信,大部分內(nèi)容來源于網(wǎng)絡(luò)教程,這里進(jìn)行總結(jié)供以后查閱. 先介紹下TCP的三次握手: 1,簡(jiǎn)單的發(fā)送消息: 服務(wù)器端: i ...
Android客戶端和服務(wù)器端數(shù)據(jù)交互
網(wǎng)上有很多例子來演示Android客戶端和服務(wù)器端數(shù)據(jù)如何實(shí)現(xiàn)交互不過這些例子大多比較繁雜,對(duì)于初學(xué)者來說這是不利的,現(xiàn)在介紹幾種代碼簡(jiǎn)單.邏輯清晰的交互例子,本篇博客介紹第四種: 一.服務(wù)器端: 代 ...
socket 通信 入門3 android 客戶端 C# 服務(wù)端
這是一個(gè)android端操控服務(wù)器的例子 ?就是發(fā)送簡(jiǎn)單指令到服務(wù)器 ?然后服務(wù)器響應(yīng)什么的... 當(dāng)然這里是未完成的 ?只是簡(jiǎn)單展示一下大致思路 首先連接建立起來后 ?服務(wù)端給客戶端一條信息 ?告訴 ...
隨機(jī)推薦
oracle正則表達(dá)式的用法
Oracle 正則表達(dá)式函數(shù)-REGEXP_SUBSTR 使用例子 .5個(gè)參數(shù) 第一個(gè)是輸入的字符串 第二個(gè) ...
修改Broforce無限人數(shù),死亡不減反加
看B站直播發(fā)現(xiàn)這個(gè)有趣的游戲,找了半天修改器無效,Cheat Engine怎么找指針有點(diǎn)忘了,直接找數(shù)值每關(guān)都要重來,想來想去還是簡(jiǎn)單粗暴的反編譯好了. 順便做下C#反編譯備忘. 首先把DLL反成IL ...
AWS Summit 2014 San Francisco站總結(jié)
我上個(gè)月去San Francisco參加了AWS Summit 2014 會(huì)議,總結(jié)一下參加這個(gè)會(huì)議的情況. 什么是AWS Summit? AWS Summit 是AWS在全球各地舉辦的,針對(duì)AWS用 ...
Tarjan+模板
#include #include #include #include #in ...
Flash上傳組件之SWFUpload文件上傳
一.什么是SWFUpload? SWFUpload是一個(gè)客戶端文件上傳工具,最初由Vinterwebb.se開發(fā),它通過整合Flash與JavaScript技術(shù)為WEB開發(fā)者提供了一個(gè)具有豐富功能繼而 ...
JS操作DOM元素屬性和方法
Dom元素基本操作方法API,先記錄下,方便以后使用. W3C DOM和JavaScript很容易混淆不清.DOM是面向HTML和XML文檔的API,為文檔提供了結(jié)構(gòu)化表示,并定義了如何通過腳本來訪 ...
---添加一條記錄返回一條記錄的ID
INSERT INTO Web_AD(PID,ADType,ADTitle,ADTitle1,ADTitle2,ADTarget,LinkURL,DispalyWords,ADCode,UploadI ...
分享到QQ空間、新浪微博、騰訊微博和人人網(wǎng)
function shareys(type, url, title, img, content) { switch (type) { case "sina": url = &quo ...
The Beam Model:Stream &;amp; Tables翻譯(上)
本文由??網(wǎng)易云發(fā)布. 作者:周思華 本篇文章僅限內(nèi)部分享,如需轉(zhuǎn)載,請(qǐng)聯(lián)系網(wǎng)易獲取授權(quán). 本文嘗試描述Beam模型和Stream & Table理論間的關(guān)系(前者描述于數(shù)據(jù)流模型論文.the ...
一文入門HTML5
1.HTML5 上節(jié)回顧:一文讀懂ES6(附PY3對(duì)比) | 一文入門NodeJS 演示demo:https://github.com/lotapp/BaseCode/tree/master/java ...
總結(jié)
以上是生活随笔為你收集整理的python与android交互,Android客户端与Python服务器端的简单通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SPSS-因子分析
- 下一篇: python斐波那契前20递归_算法py