android中的网络请求(以注册登陆为例)

Android——搭建服务器实现登录请求的验证 Android——搭建服务器实现登录请求的验证及账号记忆功能客户端服务端效果展示 客户端 登录界面设计.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http:/ 阅读详情

1、Http协议

http协议:定义的浏览器向万维网服务器请求万维网文档,以及服务器把文档传递给浏览器。http是面向应用层协议。在万维网上能够可靠的交换文件(包括文本,声音,图像等)。


2、客户端与服务器建立连接流程。

1.客户端 通过发送url发出请求。比如:http://www.baidu.com

  1. htttp—-请求的协议;(常见的http和https协议)
  2. www.baidu.com—-通过域名解析的Ip地址(ip地址难以记忆)
  3. 目录下的文件名等。(可以省略)

2.在服务器收到请求后,做出相应的响应处理,返回成功或者错误的信息,包括MIME信息。

3.客户端在收到服务器返回的信息后通过浏览器显示在屏幕上,然后断开链接。


4、Http与Socket的区别:

http://www.cnblogs.com/lwbqqyumidi/archive/2012/11/04/2754415.html
HTTP:超文本传输协议,首先它是一个协议,并且是基于TCP/IP协议基础之上的应用层协议。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,HTTP是应用层协议,主要解决如何包装数据。HTTP协议详细规定了浏览器与服务器之间相互通信的规则,是万维网交换信息的基础。HTTP是基于请求-响应形式并且是短连接,并且是无状态的协议。针对其无状态特性,在实际应用中又需要有状态的形式,因此一般会通过session/cookie技术来解决此问题。

Socket:Socket不属于协议范畴,而是一个调用接口(API),Socket是对TCP/IP协议的封装,通过调用Socket,才能使用TCP/IP协议。Socket连接是长连接,理论上客户端和服务器端一旦建立连接将不会主动断开此连接。Socket连接属于请求-响应形式,服务端可主动将消息推送给客户端。


http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;
socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。


Socket适用场景:网络游戏,银行交互,支付。
http适用场景:公司OA服务,互联网服务。


4、建立连接的三次握手

三次握手主要是为了防止过期的链接再次传给被连接的主机。

比如a主机要连接到b主机,a向b发起请求链接,由于某种原因,没有链接上,于是a
又向b发送一条请求,当b 收到a的第二次请求时,建立链接,然后断开。
这时候,a发出的第二条请求也到达b这时候,又进行的连接。其实该连接已经过期。

这里写图片描述
SYN:同步序列编号(Synchronize Sequence Numbers)
ACK:确认标志(Acknowledgement Number)
三次握手:
第一次握手:客户端发送syn到服务器,等待服务器确认。(syn=x)
第二次握手:服务器收到syn包,必须确认客户端的syn(ack=x+1),同时发送一个自己的syn包syn=y
第三次握手:客户端收到syn+ack后,再次向服务器发送确认包ack(y+1),发送后三次握手完成,建立连接。


5、Http的请求头信息

从浏览器中输入http://www.baidu.com得到下面的信息。
这里写图片描述


1、请求的内容:

- 请求地址:Remote Address

Remote Address:119.75.217.109:443

- 请求的RUL:Request URL

Request URL:https://www.baidu.com/

- 请求的方式:Request Method

Request Method:GET

- 返回码:Status Code

200 OK

2、请求头内容:

- Accept:浏览器可接受的MIME类型。

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
MIME类型:text/html,application/xhtml+xml,application/xml
Text:文本类型;
text/html:表示html文档;
Application:表示传输应用程序数据或者二进制数据;
application/xhtml+xml表示xhtml文档
application/xml表示xml文档

- Accept-Charset:浏览器接收的字符编码
Accept-Encoding:gzip,deflate(gzip是指可压缩的,deflate是指使用了lz77算法与哈夫曼编码的一个无损数据压缩文件格式)

- Accept-Language:浏览器接收的语言
Accept-Language:zh-CN,zh;q=0.8(zh-ch表示简体中文,zh表示中文,q权重系数,请求更倾向于“;”前的表示内容)
- Cache-Control:是否有缓存
Cache-Control:max-age=0

- Connection*户端与服务器的链接类型
Connection:keep-alive(keep-alive表示持久连接)

2、响应头内容:

- Cache-Control缓存
Cache-Control:private

- Connection:保持链接
Connection:keep-alive
- Content-Encoding:支持的编码
Content-Encoding:gzip
- Content-Type:
Content-Type:text/html;charset=utf-8

6、HttpUrlConnection相关的属性。

 HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();  

        // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 http中。

    urlConn.setDoOutput(true);  

    // 设置是否从httpUrlConnection读入,默认情况下是true;  
    urlConn.setDoInput(true);  

    // Post 请求不能使用缓存 
    urlConn.setUseCaches(false);  

    // 设定传送的内容类型是可序列化的java对象  
    // (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)  
    urlConn.setRequestProperty("Content-type","application/x-java-serialized-object");  

    // 设定请求的方法为"POST",默认是GET  
    urlConn.setRequestMethod("POST");  

    // 连接,上面对urlConn的所有配置必须要在connect之前完成,  
    urlConn.connect();  

7、得到向服务器提交数据的上传进度

当我们要获取上传进度的时候,一般会立即显示上传100%的进度,其实文件还在上传。
上面conn的连接中有这样一个配置。有个setUseCaches(false)这样一个属性设置。其实这个值是不起作用的,stackoverflow有许多相关的资料。api上说这个设置没有缓存,但实际上还是有缓存的,比如说向服务器提交图片或者文件,得到的是一个不真实的进度,原因是使用httpurlconnection向服务器提交数据,它都会进行缓存。也就是以这种方式得不到真正的上传进度。

如何得到真实的上传进度。
(1)conn.setUseCahces(false):不起作用。
(2)conn.setChunkedStreamingMode(1024);在api上描述的是可能不适配后台服务器,我测试的php服务器,分段传输也没有作用。
(3)conn.setFixedLengthStreamingMode(contentLength);经测试也没用作用。
(4)换httpclient。
(5)用其他c++的类库。

8、从代码中理解get与post提交数据;

1、get方法实现登陆;

服务器上代码(myeclipse建立web项目,tomcat部署项目):
这里写图片描述这里写图片描述
服务器中的代码如下:
(1)jsp中写出服务器登陆界面。

<body>
    This is my JSP page.
    <br>
    <form action="ServletDemo" method="get">
        用户名:<input type="text" id="username" name="username" /> <br>
        密码: <input type="text" id="password" name="password" /> <br> <input
            type="submit" value="提交" />

    </form>
</body>

java代码判读用户名和密码,返回登陆成功或者失败。

public class ServletDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        String username = req.getParameter("username");

        String password = req.getParameter("password");
        resp.setContentType("text/html;charset=utf-8");
        // 浏览器默认的编码是iso-8859-1转换成utf-8,如果不转换,会产生乱码。
        String name = new String(username.getBytes("iso-8859-1"), "utf-8");
        String pass = new String(password.getBytes("iso-8859-1"), "utf-8");
        System.out.println("username" + name);
        System.out.println("password" + pass);
        //如果登陆名是张三,密码是123,登陆成功,否则登陆失败。
        if ("张三".equals(name)&&pass.equals("123")) {
            resp.getWriter().write("登陆成功");
        } else
            resp.getWriter().write("用户名或密码错误");

    }
}

这里写图片描述
在android中请求服务器,从服务器中获取请求的结果,显示登陆成功,或者登陆失败。

public class MainActivity extends Activity {
    private EditText et_name;
    private EditText et_password;
    private Button btn_submit;
    private TextView tv_result;

    Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            tv_result.setText(msg.obj + "");
            Toast.makeText(MainActivity.this, (String) msg.obj, 0).show();
        };
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_name = (EditText) findViewById(R.id.et_name);
        et_password = (EditText) findViewById(R.id.et_pass);

        tv_result = (TextView) findViewById(R.id.tv_result);

        btn_submit = (Button) findViewById(R.id.btn_submit);
        // 用get的方式请求,把请求内容拼接到url后面。
        final String s = "http://192.168.1.103:8080/testServlet/ServletDemo?username=aaaa&password=1234";

        //Log.i("MainActivity", path);
        btn_submit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                final String username = et_name.getText().toString().trim();
                final String password = et_password.getText().toString().trim();
                Thread t = new Thread() {
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        try {
                            final String path = "http://192.168.1.103:8080/testServlet/ServletDemo?username="
                                    + URLEncoder.encode(username) // 对提交的数据进行url编码
                                    + "&password="+password;
                            URL url = new URL(path);
                            HttpURLConnection conn = (HttpURLConnection) url
                                    .openConnection();
                            conn.setRequestMethod("GET");
                            conn.setReadTimeout(5000);
                            conn.setReadTimeout(5000);
                            if (conn.getResponseCode() == 200) {
                                InputStream is = conn.getInputStream();
                                String text = Utils.getTextFromStream(is);
                                Log.i("MainActivity", text);
                                // 发送消息,把服务器返回的本文弹出吐司显示
                                Message msg = handler.obtainMessage();
                                msg.obj = text;
                                handler.sendMessage(msg);
                            }
                        } catch (MalformedURLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        super.run();
                    }
                };
                t.start();
            }

        });

    }

}

工具类代码:

public class Utils {

    public static String getTextFromStream(InputStream is){

        try {
            int len = 0;
            byte[] b = new byte[1024];
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            while((len = is.read(b)) != -1){
                bos.write(b, 0, len);
            }

            String text = new String(bos.toByteArray());
            bos.close();
            return text;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
}

2、以post的方法提交请求。

package com.example.logindemo;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private EditText et_name;
    private EditText et_password;
    private Button btn_submit;
    private TextView tv_result;

    Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            tv_result.setText(msg.obj + "");
            Toast.makeText(MainActivity.this, (String) msg.obj, 0).show();
        };
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_name = (EditText) findViewById(R.id.et_name);
        et_password = (EditText) findViewById(R.id.et_pass);

        tv_result = (TextView) findViewById(R.id.tv_result);

        btn_submit = (Button) findViewById(R.id.btn_submit);
        // 用get的方式请求,把请求内容拼接到url后面。
        // Log.i("MainActivity", path);
        btn_submit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                final String username = et_name.getText().toString().trim();
                final String password = et_password.getText().toString().trim();
                Thread t = new Thread() {
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        try {
                            // final String s =
                            // "http://192.168.1.103:8080/testServlet/ServletDemo?username=aaaa&password=1234";
                            final String path = "http://192.168.1.103:8080/testServlet/ServletDemo";
                            URL url = new URL(path);
                            HttpURLConnection conn = (HttpURLConnection) url
                                    .openConnection();
                            conn.setRequestMethod("POST");
                            String text = "username="
                                    + URLEncoder.encode(username) + "&password="
                                    + password;
                            conn.setReadTimeout(5000);
                            conn.setReadTimeout(5000);
                            conn.setRequestProperty("Content-Type",
                                    "application/x-www-form-urlencoded");
                            conn.setRequestProperty("Content-Length",
                                    text.length() + "");
                            conn.setDoOutput(true);
                            conn.setDoInput(true);
                            OutputStream os=conn.getOutputStream();
                            //把提交的文件写到流中;
                            os.write(text.getBytes());

                            if (conn.getResponseCode() == 200) {
                                InputStream is = conn.getInputStream();
                                String s = Utils.getTextFromStream(is);
                                Log.i("MainActivity", text);
                                // 发送消息,把服务器返回的本文弹出吐司显示
                                Message msg = handler.obtainMessage();
                                msg.obj = s;
                                handler.sendMessage(msg);
                            }
                        } catch (MalformedURLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        super.run();
                    }
                };
                t.start();
            }

        });

    }

}

服务器与客户端代码下载地址
http://download.youkuaiyun.com/detail/androidxiaogang/9344051

安卓连接数据库实现登陆注册(一) 前言 有一段时间没有更新博客了,以前小编都是发布有关spring boot的博客,今天换换口味,为大家带来安卓的Demo。 前期准备 1:下载安装并配置Andriod studio 2:准备好mysql-connector-java-5.1.47.jar,这个驱动包网上都能下载 3:创建一个空的Activity 4:修改权限(很重要) 如图 主体 1.导入mysql-connector-java... 阅读详情

相关推荐

安卓okhttp连接mysql_Android PHP Okhttp3模拟登陆和注册

全部代码:源码地址大致流程经过长达一个星期的研究,网上找了无数实例,大都只有客户端,或者用URLHttpConnection而不是OKHttp3,或者代码太过时根本调不通。经历了数不清的痛苦,东拼西凑总算找到方法跑通了,个中艰辛,真是无法言表。1.登陆使用okhttp3来发送post,将用户名,密码封装成MAP在request里2.服务器端来读取POST,与数据库验证成功再发回登陆成功消息,以JS...

weixin_36292762的博客 654

Android 网络浅析

所谓协议,就是一种“规范”、或者说“约定”,在通俗点就是“某种规则”。 平时编程用到语言:java、c++、js等也属于协议。 协议一般包含三个要素: * 语法 按照某种规则。如谍战片中的加密电报 * 语义 根据这种规则,需要表达的意思 * 顺序 形成某种顺序,包含上下文信息 如 先干什么,然后在干什么等等............

bugyinyin的博客 980

Android开发中实现用户注册和登陆的小demo分享

本文实例讲述了Android实现登录功能的方法。分享给大家供大家参考,具体如下: 登陆效果: 应用程序判断当前用户还未登陆,弹出登陆对话框,用户输入账号和密码信息后,传到服务器验证,验证成功后,现实Toast 成功信息,并转到其他界面。注册效果:用户如没有账号,则点击登陆对话框的 “没有账号,快速注册账号”, 弹出注册界面,用户输入注册信息,点击注册按钮,注册成功后,弹出toast信息”注册成功”,

suzhen666的博客 7676

Android网络请求,全方位优雅解析

标准Java接口(java.NET) —-HttpURLConnection,可以实现简单的基于URL请求、响应功能;Apache接口(org.appache.http)—-HttpClient,使用起来更方面更强大。但在android API23的SDK中Google将HttpClient移除了。Google建议使用httpURLconnection进行网络访问操作。

鸿蒙的技术博客 1945

Android studio连接MySQL并完成简单的登录注册功能

首先展示一下完成效果。数据库设计数据库内容登录结果展示此处默认您已经安装好Androidstudio与MySQL软件。接下来需要连接MySQL,首先需要开启网络权限。需要添加一句话,具体位置如图(将项目切换成Android模式比较好找)下载完成后在里边找到mysql-connector-java-5.1.47-bin.jar并复制到粘贴板。然后将Androidstudio的项目页面切换到Project模式,找到如下文件的位置进行粘贴。...

m0_67390379的博客 3627

Android PHP JSON 登录注册功能实现

Android客户端与PHP服务端交互,传输数据格式是json,实现了简单的登录、注册功能,并且能想服务端的MySQL数据库中插入数据,而且能获取数据库中的数据返回到客户端。

u011160994的专栏 6250

Android开发——网络请求

网络请求可以说是Android开发的核心,也同样是Android开发中的难点。,目的是为了统一管理各种请求接口,通知利用。,它们都是对最基础的网络请求的一层封装。提供的路由注解方便进行接口请求与规范化。

weixin_46560512的博客 3634

Android--7种网络请求方式

1):HttpClient 方式获取网络数据 2): HttpURLConnection 使用原始方式获取数据 3): Volley 方式实现图片加载 4):XUtil方式获取网络 5):ImageLoader 方式加载图片 6):OkHttp 方式获取网络请求。

Android --- 网络请求

通常在 Android 中进行网络连接一般使用 Scoket 和HTTP,HTTP 请求方式比 Scoket 多。HTTP 请求一般采用原生的 HttpClient 和 HttpUrlConnection 的两种网络访问方式(系统自带的)。

weixin_43244083的博客 2447

光谱分布、光谱辐射通量密度与不同时间段分布光谱(图示)

1、光谱分布图 2 太阳辐射能量图 3、不同时间段的太阳分布光谱图 4、不同波长的光的能量分布主要区域 5、不同波段的使用场景

maopig的专栏 2万+

Cadence 16.6与17.4双版本共存避坑指南:从安装顺序到环境变量配置

本文是一份详细的Cadence 16.6与17.4双版本共存实战指南。针对硬件工程师和PCB设计者同时处理新旧项目的需求,文章深入剖析了版本冲突根源,并提供了从安装顺序、环境隔离到故障排查的完整解决方案。核心在于通过环境变量精细化管理与脚本控制,实现两个版本的稳定共存与无缝切换,有效解决了文件关联混乱、交互布局失效等常见问题。

html8的博客 982

android开发 使用HttpClient访问网络,post、get方式。注册、登陆、上传文件。

今天在屋里。想贡献点东西。就写了一个HttpClient的使用方法的示例程序。大家可以下载下来看看。 源码在

孤风残影 799

Dzzoffice结合OnlyOffice 报错排查流程总结

首先访问 OnlyOffice 首页,如下图:出现上图仍旧不能说明你的 OnlyOffice 服务已经成功安装,我们需要启动 OnlyOffice 服务测试用例来检测,可以看到上图出现了两条命令,第一条命令是用来启动测试用例服务的,我们只需要在后台执行该命令即可,Windows环境是以管理员身份运行Windows PowerShell输入即可运行了。

小胡的博客 4598

Android 网络编程-网络请求

网络请求一定要在子线程执行,否则会报错。数据返回后要显示在界面上要切换回主线程。如果频率很多的使用网络请求,直接使用原生请求即可,不用使用网络框架。如果使用频率很高,可以使用健全的网络框架:OkHttp/Retrofit;OkHttp使用简单,Retrofit 使用复杂一些,但是和很多其他框架可以结合使用,比如Gson,RxJava等。

wenzhi的博客 1715

深入AOSP构建系统:从BUILD_FINGERPRINT的生成逻辑,看如何定制你的Android设备标识

本文深入解析AOSP构建系统中的设备指纹生成机制,详细介绍了BUILD_FINGERPRINT的生成逻辑及其在Android设备中的关键作用。通过分析多个指纹属性的区别与联系,以及如何定制设备标识,帮助开发者更好地理解和掌握Android系统构建过程。

weixin_27017211的博客 217

域自适应的理解与想法(Domain Adaptation)

这幅图是域适应非常有名的一篇论文中的插图,被很多文章转载。 什么是领域自适应? Domain Adaptation是迁移学习中很重要的一部分内容,目的是把分布不同的源域和目标域的数据,映射到一个特征空间中,使其在该空间中的距离尽可能近。于是在特征空间中对source domain训练的目标函数,就可以迁移到target domain上,提高target domain上的准确率。 上面的图主要的思想来源于GAN,上图由三部分组成:特征映射网络 标签分类网络和和域判别网络 其中,source domain的数.

yuanxue18的博客 5982

安卓连接数据库SQLite实现注册登陆显示功能

代码在下方 Android连接SQLite 1.SQLite简介: 轻量级: 使用 SQLite 只需要带一个动态库,就可以享受它的全部功能, 而且那个动态库的尺寸想当小。 独立级: SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。 隔离性 SQLite 数据库中所有的信息(比如表、视图、触发器等) 都包含在一个文件夹内,方便管理和维护。 跨平台 SQ...

nswdiphone6的博客 2911

ubuntu18.04安装Nvidia显卡驱动后黑屏及网络、蓝牙驱动消失的解决方案

ubuntu18.04安装Nvidia显卡驱动后黑屏及网络、蓝牙驱动消失的解决方案

weixin_40735291的博客 6619

android 登陆网络请求,【Android】RxJava + Retrofit完成网络请求

RxJava + Retrofit前言本文基于RxJava、Retrofit的使用,若是对RxJava或Retrofit还不了解的简友可以先了解RxJava、Retrofit的用法再来看这篇文章。在这片文章之前分别单独介绍过Rxjava以及Retrofit的使用:Android Retrofit 2.0 的使用Android RxJava的使用(一)基本用法(以及后面的几篇,就不一一列出了)使用在...

weixin_33152959的博客 342

(5)ModalAI VOXL2

Ardupilot官网关于《Non-GPS navigation》的翻译 —《(5) ModalAI VOXL2》。

无人机开发(开源Ardupilot) 1万+

C#面试题及详细答案120道(01-10)-- 基础语法与数据类型

C#与.NET部分重点解析了7个核心问题:1)C#与.NET的依存关系;2)值类型与引用类型的内存差异;3)装箱拆箱的性能损耗;4)string/String与int/Int32的实质等价性;5)const与readonly的初始化区别;6)可空类型的应用场景;7)ref与out关键字的参数传递机制。内容包含原理对比、代码示例和优化建议,适合开发者系统掌握C#核心概念。(1

大剑师兰特的GIS世界 1963

Android借助bmob实现简单的登陆注册

借助bmob实现简单的登陆注册实现步骤1注册bmob2配置Bomb相关3扩展自己的用户列表4实现注册5实现登陆 欢迎下载 https://github.com/kurumi2501314/Bmobdemo/blob/master/demo.apk 实现步骤 引用的地址为 https://github.com/mzule/FantasySlide 原文有使用介绍,这里将步骤详 1注册bmob 去b...

酸菜鱼翻身历程 3328

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

day13_安卓中常见的网络请求方式

安卓中常见的网络请求方式 HttpUrlConnection 1.get请求 2.post请求 3.下载网络视频/音乐/图片到SD卡中 一.概念: 1.http:超文本传输协议(客户端和服务端),应用层协议 2.html:超文本标记语言 3.xml:可扩展标记语言 二.网络七层 应用层:http 表示层:将人看的懂的转成计算器 会话层:发起会话 传输层:tcp协议+udp协议 网络层:ip协议 数...

mars_liurui的博客 764

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android PHP Okhttp3模拟登陆和注册

Android+PHP+OKHttp3+MySQL 完成登陆验证和注册功能

qiou2719的专栏 4516

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【安卓登录注册】

Android开发 实现登录注册界面

weixin_53644402的博客 798

安卓端接入微信登陆流程

安卓端接入微信登陆流程

m0_66843126的博客 3317
上一篇: android中联系人搜索框
下一篇: Android中的Handler
android_xiaogang
博客等级 码龄12年 89粉丝 142原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值