日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python与android交互,Android客户端与Python服务器端的简单通信

發(fā)布時(shí)間:2023/12/20 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python与android交互,Android客户端与Python服务器端的简单通信 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近在做一個(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 & 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。