Android小项目集合100多个

2023-10-27

是学习和联系Android小项目的使用资料.排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不相关的项目, 所以排名并不具备任何官方效力, 仅供参考学习, 方便初学者快速了解当前一些流行的 Android 开源库。

文件:url80.ctfile.com/f/25127180-745422874-4fe882?p=551685 (访问密码: 551685)


这啥意思呢?这个字符串序列代表的就是受支持的 HTTP 请求方式。比如,如果此属性返回 GET POST,那么被修饰的对象既支持 HTTP-GET 请求,也支持 HTTP-POST 请求。咱们在写 Web API 时最熟悉的这几个特性类就是实现了 IActionHttpMethodProvider 接口。

复制代码
[HttpGet]
[HttpPost]
[HttpPut]
[HttpDelete]
[HttpHead]
[HttpPatch]
[HttpOptions]
复制代码
这几个特性类不仅实现了 IActionHttpMethodProvider 接口,还实现了 IRouteTemplateProvider。所以它们可以当 [Route] 特性来用,又可以限制 HTTP 请求方式,一举两得。

咱们在实际项目中,如果希望一个操作方法同时支持多种请求方法,可以叠加使用以上特性类。比如

[HttpPut]
[HttpPost]
public float GetAFloat()
还可以自己定义一个特性类,实现 IActionHttpMethodProvider 接口,从 HttpMethods 属性返回一组请求方式。

复制代码
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class CustHttpmethodsAttribute : Attribute, IActionHttpMethodProvider
{
private readonly string[] _httpmethods;

// 构造函数
public CustHttpmethodsAttribute(params string[] httpmethods)
{
    _httpmethods = httpmethods;
}

// 这个是实现接口的成员
public IEnumerable<string> HttpMethods => _httpmethods;

}
复制代码
很简单的一个类,HttpGet 等特性类只能应用到操作方法上,这里老周把限制放宽一些,让其可以应用到类和方法上,即可以用在控制器和操作方法上面。

通过构造函数的参数可以传递一个或 N 个HTTP请求方式。正因为如此,该特性类在同一个目标上就不需要多次应用了,所以,我把 AllowMultiple 设置为 false。

接下来,测试一下这厮能不能用。

复制代码
[CustHttpmethods(“PUT”, “POST”), Route(“manage/[action]”)]
public class StudentController : ControllerBase
{
public IActionResult AddNew(Student stu)
{
// 要是 StuSerail 或 Name 属性没找到
// IsValid 就返回 false
if(!ModelState.IsValid)
{
return Content(“数据无效”);
}

    return Content($"添加成功!\n学号:{stu.StuSerial}\n姓名:{stu.Name}\n年龄:{stu.Age}\n微信名称:{stu.WXName}");
}

}
复制代码
下面是 Student 类的定义。

复制代码
public class Student
{
///
/// 学号
///
[BindRequired]
public long StuSerial { get; set; }
///
/// 姓名
///
[BindRequired]
public string? Name { get; set; } = “宇宙人”;
///
/// 微信名字
///
public string? WXName { get; set; } = “钓鱼佬”;
///
/// 年龄
///
public int Age { get; set; } = 0;
}
复制代码
应用了 BindRequired 特性的意思就是:在模型绑定时,如果没能在客户端提交的数据中找到这些属性的值,那么模型的绑定状态(Model State)就会设置 IsValid 属性为 false。在 Student 类中,StuSerial 和 Name 属性要求必须绑定有效。

根据上述代码的设计,Student 控制器中的所有操作都只允许 HTTP-PUT 和 HTTP-POST 两种请求。下面咱们来验证一下,前面写的 CustHttpmethods 特性是否生效。

这里老周用 .NET Tools 提供的 http-repl 工具来测试——嗯,别多想,肯定是个命令行工具。如果你还没安装,可以用这条命令安装它。

dotnet tool install -g Microsoft.dotnet-httprepl
其中,-g 表示安装到用户的默认路径中。

用法:httprepl http://localhost:1254,回车后进入交互模式,只要输入相关命令即可。如 get post delete put patch 等,帮助信息可以用 help 来查看。

咱们把 echo 选项打开,这样该工具就会显示请求的 HTTP 消息。

echo on
运行应用程序,试试 HTTP-GET 能不能访问。

get /manage/addnew?stuserial=123456&name=小吴&age=22
得到的响应消息如下:

显然,GET 方法无法通过。

那试试 POST 。

post /manage/addnew -h “Content-Type=application/x-www-form-urlencoded” -c stu.stuserial=123456&stu.name=小明&stu.age=24&stu.wxname=二哈
-h 表示要添加的 HTTP 消息头,多个头可以多次使用-h,总之一个头用一次-h;-c 表示正文(body)。

这一次提交很顺利,得到服务器的正确回应。

正文部分的 stu 前缀可以省略。

stuserial=123456&name=小高&age=20&wxname=工具人
POST 请求没有问题,再试试 PUT。

put /manage/addnew -h Content-Type:application/x-www-form-urlencoded -c stuserial=67980&name=小张&age=19&wxname=扫雷冠军
请求也成功完成,服务器有正确的响应。

咱们继续实验。刚才测试的都是标准的 HTTP 请求方式,要是咱们来个非规范的会怎么样呢?比如,弄个叫 “SET” 的请求方法。

[CustHttpmethods(“SET”), Route(“manage/[action]”)]
public class StudentController : ControllerBase
{
……
}
实验继续。

这一次咱们不能用 http-repl 工具了,因为 SET 不是规范的请求方式,测试工具不支持。但可以写个控制台应用程序来测试。

复制代码
// 这一行主要是为了等服务器运行起来
// 当此项目与服务器项目一起启动时用得上
await Task.Delay(1000);

Uri rootUrl = new(“https://localhost:12550”);

HttpClient client = new();

// form-data
IDictionary<string, string> data = new Dictionary<string, string>()
{
[“stuserial”] = “76008”,
[“name”] = “小青”,
[“age”] = “19”,
[“wxname”] = “南方小鲟”
};

FormUrlEncodedContent content = new FormUrlEncodedContent(data);

HttpRequestMessage reqmsg = new HttpRequestMessage();
// 这个不是标准的,得自己写上
reqmsg.Method = new HttpMethod(“SET”);
reqmsg.RequestUri = new Uri(rootUrl, “/manage/addnew”);
reqmsg.Content = content;
// 发送
var resp = await client.SendAsync(reqmsg);

Console.WriteLine( " 响 应 代 码 : ( i n t ) r e s p . S t a t u s C o d e " ) ; C o n s o l e . W r i t e L i n e ( "响应代码:{(int)resp.StatusCode}"); Console.WriteLine( "(int)resp.StatusCode");Console.WriteLine(“响应内容:\n{await resp.Content.ReadAsStringAsync()}”);

// 这两行只是为了让程序能停下来罢了,没其他用途
Console.WriteLine();
Console.ReadKey();

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android小项目集合100多个 的相关文章

  • 设置 SWT Shell 的默认字体

    有没有办法为整个 Shell 设置默认字体 以便任何新控件都将使用相同的字体 看来现在我必须为我创建的每个控件设置字体 这导致了太多的冗余 默认使用的字体由平台选择 请参阅中的其他信息 类字体 SWT 标准小部件工具包 http book
  • 线程“main”java.lang.UnsatisfiedLinkError中出现异常:java.library.path中没有opencv_java249

    我目前正在尝试在我的 32 位笔记本电脑上设置 OpenCV 但我不断收到一条令我困惑的错误消息 Exception in thread main java lang UnsatisfiedLinkError no opencv java2
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • 如何测试调用父类的受保护(不需要的)方法的方法?

    我陷入了一个非常奇怪的情况 我有一些需要测试的特定代码 这里是 public class A The real method of real class is so big that I just don t want to test it
  • @OneToMany 与 @JoinTable 错误

    我试图理解 OneToMany with JoinTable 对于这样的场景 我正在使用 JPA 2 1 Hibernate 5 0 4 和 Oracle 11 XE 当我打电话时userDao save user 下面的代码 我有 jav
  • 如果基于 Spring 注解的控制器位于 jar 文件内,则该控制器无法工作

    我的子模块中有一些基于注释的控制器 这些模块作为 jar 文件部署 jar 文件中基于注释的控制器未加载到 spring 配置中 我使用 Eclipse 中的导出实用程序手动导出 jar 文件 有人遇到过这个问题吗 当您使用 Eclipse
  • Java Spring 应用程序存在内存泄漏。系统非堆内存不断增加

    我已使用 yourkit 分析器监视我的 Web 应用程序 保留最大大小的主要对象是 SessionFactoryImpl webappclassloader 和 CGlib 对象显示 spring crone调度程序会导致内存泄漏吗 我尝
  • 正确使用 JDBC 连接池 (Glassfish)

    我需要在 Java Web 服务中作为会话 bean 实现数据库连接 但我不确定我这样做是否正确 我创建了一个类 public final class SQLUtils private static DataSource m ds null
  • 从关卡堆栈中获取相对比例的数学

    为这个可怕的标题道歉 我花了 10 分钟试图用一句话来解释这一点 但失败了 虽然提示这个问题的应用程序是用Java Android 编写的 但我认为它非常通用并且适用于任何语言 欢迎使用伪代码 或简单的英语 回复 我不确定是否应该标记所有通
  • 如何制作无限的jscrollpane?

    我之前已经实现过拖动滚动 但是创建无限滚动窗格的最佳方法是什么 当然不会有任何滚动条 我将实现拖动滚动 我想做的是在无限表面上实现动态加载 EDIT 当然 它实际上不会是无限的 我想问如何伪造它 您可以执行以下操作 AdjustmentCl
  • SimpleDateFormat 将 lenient 设置为 false 时出现异常

    为什么这段代码会抛出无法解析日期的异常 SimpleDateFormat f new SimpleDateFormat yyyy MM dd T HH mm ss 000Z f setLenient false String dateStr
  • HTTP PUT 在 Java 中上传文件

    Edit 我想我已经弄清楚如何执行二进制数据部分 仔细检查代码 但我很确定我做对了 现在 当我尝试按照中所述完成上传时遇到新错误Vimeo API 文档 http vimeo com api docs upload streaming Ed
  • 在Java中多次读取System.in会导致IOException?

    我正在尝试创建一个小命令行游戏来强化我在过去几个月中在 Java 中学到的一些东西 我正在尝试创建一个名为 readInput 的方法 它返回一个我可以一次又一次调用的字符串 第一次它工作正常 但第二次它会导致 IO Exception 如
  • 如何使用云打印打印Android活动显示

    我正在尝试将 Google 云打印实现到应用程序中 遵循集成指南 https developers google com cloud print docs android 我试图通过打印 google com 来保持基本 单击我创建的打印按
  • 找不到符号assertEquals

    我正在尝试为计算器编写第一个单元测试 但 NetBeans 说它找不到该符号assertEquals和注释 Test 我应该包括一些东西吗 我正在使用 NetBeans 7 3 1 和 W7 package calculator impor
  • Selenium - 等待网络流量

    我们将 Selenium 与 Java API 和一些 Javascript 用户扩展一起使用 我们在应用程序中使用了大量 AJAX 调用 我们的许多测试随机失败 因为有时 AJAX 调用完成得比其他时候慢 因此页面未完全加载 我们通过等待
  • 如何从spark中的hbase表中获取所有数据

    我在 hbase 中有一个大表 名称为 UserAction 它具有三个列族 歌曲 专辑 歌手 我需要从 歌曲 列族中获取所有数据作为 JavaRDD 对象 我尝试了这段代码 但效率不高 有更好的解决方案来做到这一点吗 static Spa
  • 编写自定义 Eclipse 调试器

    EDIT 一定有某种方法可以解决这个问题 而无需编写全新的调试器 我目前正在研究在现有 java 调试器之上构建的方法 如果有人对如何获取 Java 调试器已有的信息 有关堆栈帧 变量 原始数据等 有任何想法 那将非常有帮助 我想要做的是我
  • 使用 Runtime.getRuntime().exec() 进行重定向不起作用

    我需要从程序执行命令 命令行是可以的 我在终端试了一下 但是在程序中不行 我从我的代码中添加一个副本 File dir new File videos String children dir list if children null Ei
  • Integer.parseInt 引发的 NumberFormatException

    嘿 我在学校上编码课 但老师没有很好地解释 所以我们必须在网上查找我所做的信息 但我无法找到代码中的错误 你能帮我吗 char end s do System out println Tipo de boleto char boleto c

随机推荐

  • Golang闭包陷阱

    golang闭包陷阱本质原理其实是range陷阱 Golang for range陷阱 ep 1 func main var values int 1 2 3 4 5 for value range values go func fmt P
  • 编译 OneFlow 模型

    本篇文章译自英文文档 Compile OneFlow Models tvm 0 14 dev0 documentation 作者是 BBuf Xiaoyu Zhang GitHub 更多 TVM 中文文档可访问 Apache TVM 是一个
  • 3月6日服务器例行维护公告,2014年3月6日停机维护公告

    亲爱的玩家 为了保证服务器的稳定和服务质量 新大话西游2 将于2014年3月6日早上8 00停机 进行每周例行的维护工作 维护时间为早上08 00至09 30 同时 本次停机还将发布最新的客户端补丁 patch2 0 476 如果在维护期间
  • Java高级编程——多线程(JDK5新增创建线程方式Callable,线程池)

    创建线程的第三 四种方式 一 实现Callable接口 1 1与Runnable相比 1 2实现步骤 创建Callable接口实现类 重写call方法 新建实现类对象 将实现类对象作为参数传递待FutureTask的构造器中 创建Futur
  • 使用redis进行用户接口访问时间次数限制

    使用redis进行用户接口访问时间次数限制 假设一个用户 用IP判断 每分钟访问某一个服务接口的次数不能超过10次 import org apache commons lang3 StringUtils import org slf4j L
  • Android Studio一直Waiting for build to finish

    今天安卓的gradle文件出现问题 所以将C Users Administrator gradle删除 接下来出现下图的问题 这是由于安卓缺少gradle文件 图片来自https blog csdn net Hanghang article
  • 手撕yolo3系列——详解主干网络darknet53代码(详细注释)

    完整代码百度云直达链接 包含预训练权重 小白注释 https pan baidu com s 1US6e93OaCYOghmF21v0UIA 提取码 z8at 参考链接 注 代码是大神的代码 在此基础上添加了详细的小白注释 方便我以后阅读
  • Keil调试即全速运行/断点不停的其中一个原因

    平台 芯片 STM32F767IGT6 环境 Keil 5 14 00 问题 keil 下载程序可以执行 调试时刚进调试就上电运行 打断点不停 但是程序正常在跑 可以单步调试 原因 Jlink硬件版本和驱动的问题 解决 之前电脑使用stm3
  • image.shape[0],image.shape[1],image.shape[2]

    import cv2 image cv2 imread D shape bmp print image shape 0 print image shape 1 print image shape 2 结果 300 200 3 其中shape
  • mysql8.0安装之后,无法使用密码正常登陆

    修改方法 重置密码 以下为步骤 1 以管理员身份先关闭mysql服务器 net stop mysql 删除mysql目录下data文件夹 如果有就删除 2 在mysql目录下输入 mysqld initialize user mysql c
  • python如何判断是否为整数

    python 判断是否为整数的方法 1 使用 type 函数判断 代码为 type name bases dict 2 使用 isinstance 函数判断 代码为 isinstance object classinfo 本教程操作环境 w
  • java 生成随机字母数字组合

    import java util Random public class RandomTest 方法1 生成随机数字和字母组合 param length return public static String getCharAndNumr
  • 让UE4中的TextRender永远面向摄像机,就像Billboard那样!

    让UE4中的TextRender永远面向摄像机 就像Billboard那样 让UE4中的TextRender永远面向摄像机就像Billboard那样 前言 Find Look At 函数 BillBoard 材质编程 前言 最近找了个兼职
  • socket网络编程(二)(tcp udp)

    1 socket大概介绍 Socket的中文翻译过来就是 套接字 套接字是什么 我们先来看看它的英文含义 插座 Socket就像一个电话插座 负责连通两端的电话 进行点对点通信 让电话可以进行通信 端口就像插座上的孔 端口不能同时被其他进程
  • 负电压实现方法

    目录 方法一 负压芯片实现 方法二 Buck Boost电路方法 方法三 用Buck芯片产生出负压 结论 方法一 负压芯片实现 在电子市场或电子网站上 可以很容易找到使用charge pump方式的负电压芯片 但是输入的电压最高只有5 5V
  • 中青杯数学建模竞赛是什么级别的比赛_比赛介绍

    一 背景介绍 美国大学生数学建模竞赛 MCM ICM 由美国数学及其应用联合会主办 是唯一的国际性数学建模竞赛 也是世界范围内最具影响力的数学建模竞赛 为现今各类数学建模竞赛之鼻祖 二 活动目的 MCM ICM的宗旨是鼓励大学师生对范围并不
  • Variational Auto-encoder(VAE)变分自编码器-Pytorch

    import os import torch import torch nn as nn import torch nn functional as F import torchvision from torchvision import
  • 领地人生服务器维护,领地人生gm代码是什么 领地人生服务器指令

    领地人生是一款非常真实的沙盒生存类游戏 游戏中玩家将要成为一名生存者 需要通过不断造房屋 猎杀野兽生存下来 游戏中的一些指令可以加快你的建造速度 下面就和小编一起来看看吧 GM password 开 关 GM模式 例如 gm mysecre
  • Numpy数组排序

    numpy sort a axis 1 kind quicksort order None 返回已排序新数组 参数说明 axis 可选参数 取值整数或None 若axis为None 数组先偏平化 降维 再排序 若axis N 表示沿着数组的
  • Android小项目集合100多个

    是学习和联系Android小项目的使用资料 排名完全是根据 GitHub 搜索 Java 语言选择 Best Match 得到的结果 然后过滤了跟 Android 不相关的项目 所以排名并不具备任何官方效力 仅供参考学习 方便初学者快速了解