最近在做一个APP,需要与服务器通信,一点一点的尝试,记录一下。

本文使用了OkHttp和Flask框架。

Android客户端:

实现功能输入完点击OK按钮后会toast成功的信息。

Python服务端:

各部分代码如下:

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 ...

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

  1. python与word交互_Python基础——与Python的指令交互

    Python是近几年兴起的一门编程语言,也是人工智能的主要语言,在TIOBE排行榜上占据着不错的位置,是许多程序员学习的对象,对于孩子来说,学习Python还是有些吃力的,我们需要从头开始一点点学起. ...

  2. python与网页交互_可爱的 Python: 使用 mechanize 和 Beautiful Soup 轻松收集 Web 数据

    可爱的 Python 使用 mechanize 和 Beautiful Soup 轻松收集 Web 数据 使用 Python 工具简化 Web 站点数据的提取和组织 David Mertz 2010 ...

  3. python zookeeper_ZooKeeper的安装以及客户端Kazoo(Python语言)的安装与使用

    ZooKeeper具体的安装流程,如下所示: 首先,由于ZooKeeper是JAVA开发的,所以先要安装JDK,此处我是安装在/usr/local/jdk目录下,设置环境变量即可. 第二,到ZooKe ...

  4. Socket之UDP客户端【Python】

    下面是其他相关的终端的创建: Socket之TCP服务器[Python] Socket之TCP客户端[Python] Socket之UDP服务器[Python] 在我们编写的4个终端中,UDP客户端的 ...

  5. Socket之TCP客户端【Python】

    下面是其他相关的终端的创建: Socket之TCP服务器[Python] Socket之UDP服务器[Python] Socket之UDP客户端[Python] 同样的,跟创建TCP服务器一样,我们也 ...

  6. struts2服务端与android交互

    本文主要包括以下内容 android与struts2服务器实现登陆 android从struts2服务器获取list数据 android上传数据到struts2服务器 服务器端代码 package c ...

  7. python编写游戏测试机器人客户端(一)

    系列文章目录 python编写游戏测试机器人客户端(一) python编写游戏测试机器人客户端(二) python编写游戏测试机器人客户端(三) python编写游戏测试机器人客户端(四) pytho ...

  8. 数据库笔记(4)SQL练习题及Python与数据库交互

    一.数据的准备 1.1创建数据表 --创建"京东"数据库 create database jing_dong charset=utf8; --使用"京东"数据库 ...

  9. python包接口,Typetalk聊天API的python接口包

    typetalk是一款外国的通讯工具,它开放api,让开发者能创建聊天机器人和关于话题的讨论群组,非常容易的获取到关于话题的聊天数据.从而可以开发出更加灵活的应用. 用python编写的typetal ...

最新文章

  1. WebForm与MVC混用
  2. Linux下pwn从入门到放弃,pwn从入门到放弃第六章——简单ROP
  3. AAAI 2022 | 条件局部图卷积网络用以气象预测
  4. 前端又一本升级版图书上市了,听说比第一版还好看
  5. poj 1733 ParityGame 并查集 离散化
  6. C++中,int a = 10的后面的操作
  7. mysql的游标处理_MySQL存储过程 游标 错误处理的示例代码
  8. grideh SelectedRows Bookmark
  9. 初次见面C#排坑记录
  10. 服务器延迟和时间偏移怎么设置,服务器时间经常不对如何处理
  11. linux上mysql命令无效_linux下mysql命令没用
  12. 【Python技巧】字典
  13. 计算机应用中格式刷怎么用,如何连续使用格式刷【搞定手段】
  14. keras的net中使用tensorflow函数, AttributeError: ‘NoneType‘ object has no attribute ‘_inbound_nodes‘
  15. 基于java的个人日程管理系统mysql
  16. 如何去掉图片上的水印 图片水印怎么去掉
  17. Scrum 计划、站会、评审、回顾会议介绍
  18. 在线流程图工具推荐 免费 好用 可与语雀联动
  19. 欧拉计划问题四 学习笔记 matlab 回文字符串+length()+floor()
  20. 一份完整的运营方案应包含的七个方面

热门文章

  1. 中科大 计算机网络4 网络核心Core 分组交换 电路交换
  2. 遍历Map key-value的两种方法、遍历Set方法
  3. Java中十六进制转换 Integer.toHexString()
  4. 「机械」4大传动方式优劣对比:机械、电气、气压、液压
  5. 进度条控制(Windows 公共进度栏控件的功能)
  6. HDU - 5919 Sequence II
  7. Python基础第一天
  8. 使用sqlite3创建数据库表的时候须要注意
  9. javascript高级程序设计学习之数值转换 |Number(),parseInt(),parseFloat()
  10. shell中的条件判断和比较