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.mzph.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 方法的软件设计过程是从数据结构入手,由数据结构之间的关系导出程序结构,这使软件系统的开发“有章可循”。尤其这一方法特别适合于以数据为主,“计算”较简单的数据处理系统。因此可称其为“面向数据的方法”。由于这一技术未提供对…