android 访问web,android 访问web端与解析json,模拟用户登录
之前写过一个java web端的登录验证,最后返回一个json字符串。
字符串格式如下:{"appmsg":"账号或密码错误","appcode":0,"_default_boolean_a":false}
今天就结合着Android来写一个简单的登录。
注意: 在AndroidManifest.xml里给访问网络的权限
在写具体路径时,一定要注意不要用localhost,因为识别不了。一定要写具体的IP
步骤如下:
1、先做好页面布局
2、在activity中获取用户名、密码
3、把用户名、密码附加到请求的地址上
4、new 一个子线程,在子线程里通过HttpURLConnection 去请求数据
5、根据连接返回的状态码判断是否成功连接
6、成功连接的话,就获取response的数据,返回inputstream流
7、将流转为String类型,通过UI线程的消息循环机制,将该String类型的结果返回到UI线程中
8、在UI线程中处理子线程中返回的结果
9、将String的结果转为JSONObject对象,去获取该对象中的code结果,0为登录失败,1为登录成功。
10、弹出Toast,提示用户登录失败或成功。
一、布局页面
首先是一个页面布局,如下<?xml version="1.0" encoding="utf-8"?>
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:id="@+id/p_w_picpathView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
app:srcCompat="@drawable/qq"/>
android:id="@+id/et_qqNum"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="请输入QQ号码"
android:inputType="textPersonName"/>
android:id="@+id/et_pwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="输入密码"
android:inputType="textPassword"
/>
android:id="@+id/cb_rember"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="记住密码"
/>
android:id="@+id/bt_sub"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="login"
android:text="提交"/>
2、MainActivitypackage com.yuanlp.qqloginweb;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private static final int LOAD_SUCCESS =1 ;
private static final int LOAD_ERROR =2 ;
private EditText mQqNum;
private EditText mQqPwd;
private CheckBox mCb_rember;
/**
*主线程中建一个handler,来获取子线程中的Message
*
*/
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case LOAD_SUCCESS:
boolean flag=checkLogin(msg.obj.toString());
if (flag){
Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT).show();
}
sub.setEnabled(true);
}
}
};
private Button sub;
private String mQq;
private String mPwd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mQqNum= (EditText) findViewById(R.id.et_qqNum);
mQqPwd = (EditText) findViewById(R.id.et_pwd);
mCb_rember = (CheckBox) findViewById(R.id.cb_rember);
sub = (Button) findViewById(R.id.bt_sub);
}
public void login(View view){
//Toast.makeText(this,"点击了提交",Toast.LENGTH_SHORT).show();
mQq = mQqNum.getText().toString().trim();
mPwd = mQqPwd.getText().toString().trim();
//mCb_rember.getText().toString().trim();
if (TextUtils.isEmpty(mQq)||TextUtils.isEmpty(mPwd)){
Toast.makeText(this,"QQ号码或者密码为空",Toast.LENGTH_SHORT).show();
return;
}else {
//选中了保存密码
if (mCb_rember.isChecked()){
}
}
//这里设置按钮不能点,应为一直点,就一直发送请求,会造成一直请求数据
sub.setEnabled(false);
/**
* 点击按钮事件,在主线程中开启一个子线程进行网络请求
* (因为在4.0只有不支持主线程进行网络请求,所以一般情况下,建议另开启子线程进行网络请求等耗时操作)。
*/
//请求网络
new Thread(){
@Override
public void run() {
try {
Thread.sleep(5000);
String path="http://192.168.1.111:10010/aos/pdaLogin.jhtml?username="+ mQq +"&password="+ mPwd;
URL url = new URL(path);
//打开httpurlconnection
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET"); //设置get方式获取数据
conn.setConnectTimeout(5000); //设置连接超时时间5秒
int code = conn.getResponseCode(); // 获取response状态,200表示成功获取资源,404表示资源不存在
if (code==200){
InputStream is=conn.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
StringBuffer sb=new StringBuffer();
String len=null;
while((len=br.readLine())!=null){
sb.append(len);
}
String result=sb.toString();
/**
* 子线程发送消息到主线程,并将获取的结果带到主线程,让主线程来更新UI。
*/
Message msg= Message.obtain();
msg.what=LOAD_SUCCESS;
msg.obj=result;
handler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
Message msg=Message.obtain();
msg.what=LOAD_ERROR;
handler.sendMessage(msg);
}
}
}.start();
}
private boolean checkLogin(String result) {
boolean flag=false;
JSONObject jsonObject=null;
try {
jsonObject=new JSONObject(result);
String code=jsonObject.get("appcode").toString();
if ("0".equals(code)){
flag=false;
}else if("1".equals(code)){
flag=true;
}
} catch (JSONException e) {
e.printStackTrace();
}
return flag;
}
}
android 访问web,android 访问web端与解析json,模拟用户登录相关推荐
- 【ASP.NET Web】项目实践—网上宠物店5:创建用户登录/注销页面、完善母版页
基于数据库的 Web 应用程序都需要考虑网站的安全性,网站离不开权限管理,包括用户身份识别和用户授权两部分.识别用户身份通过登录来实现.用户授权是根据不同的用户身份判断是否允许其访问某个网页或执行某些 ...
- Web中JS(Javascript)解析JSON数据的方法
js解析json数据,可以使用JSON.parse()方法来实现解析.JSON.parse()方法可以解析JSON字符串,转换为 JavaScript 对象 下面我们就结合简单的代码示例,给大家介绍j ...
- 简单步骤,使用 Android studio 实现保存 QQ 账号密码,和简易 QQ 用户登录界面
利用 Android studio 2021 软件输出一个简易用户登录界面,拥有头像并且能够实现对自行输入的账号密码进行保存,文件名为 saveqq,功能实现对账号与密码的输入和存储,简单QQ界面布局 ...
- 魔方APP项目-07-客户端提交登录信息、在APICloud中集成防水墙验证码,前端获取显示并校验验证码、服务端校验验证码、保存用户登录状态,APICloud提供的数据存储、客户端保存用户登陆数据
用户登录 一.客户端提交登录信息 html/login.html,代码: <!DOCTYPE html> <html> <head><title>登录& ...
- Android初级开发(九)——网络交互—解析JSON格式数据
一.前言 首先还是在web服务器(我这里用的是tomcat)新建json文本 文本内容 在浏览器上预览一下 二.JSONObject方法 1.我们还是在OkHttp的基础上修改代码,布局不变 Main ...
- Android复习06【网络编程提高篇-安装GsonFormat、HttpUrlConnection封装、线程池、GsonFormat解析Json、自动加载下一页、自定义组件、页头页尾刷新、侧滑删除】
2020-04-07 星期二 [第8周] [考试不考...] 目 录 思维导图 安装GsonFormat插件 添加网络访问权限 GitHub---HttpUrlConnection封装 线程池 G ...
- android 后台数据获取,android post方式给后台服务器传递数据
请求方式GET和POST的简单分别: get方式是把参数附加到URL地址后面,如: post是将请求参数放到请求体中,以流的方式传到服务器,另外上传文件时,一定是post方式 下面的代码是用post方 ...
- android与mysql数据库同步_android开发 如何通过web服务器访问MYSQL数据库并且使其数据同步到android SQLite数据库?...
通过web服务器访问MYSQL数据库有以下几个过程: 1.在MySql下创建自己的数据库和自己的表单 2.连接数据库. 3.访问数据库 1.创建web工程 (服务器端) 在Myeclipse下新建一个 ...
- android模拟器访问本地web应用,从 iOS 模拟器和 Android 模拟器连接到本地 Web 服务...
从 iOS 模拟器和 Android 模拟器连接到本地 Web 服务Connect to local web services from iOS simulators and Android emul ...
最新文章
- axis2 调用webservice
- Supervised Convolutional Neural Network
- 花两个小时,做了个分页控件
- [导入]在asp.net中实现观察者模式,或有更好的方法(续)
- NUC1041 数字三角形【DP】
- PHPExcel 表格 行 合并
- 打印机打印字体轻,像针式的故障处理(图)
- 初识 Hbase 数据库
- 计算机考研专业课408什么意思,考研408是什么意思
- mir2 client: review
- 搜索计算机硬盘的索引恢复,如何修复Windows 10搜索索引 | MOS86
- 小插件,通过js实现邮箱自动提示功能
- 保龄球计分java代码_保龄球记分程序用C#该怎么写
- 电脑发送打印任务后打印机没有执行是怎么回事
- Docker安装与镜像的使用
- 思成五笔的通俗易懂讲解
- Flutter无限循环滑动的PageView
- css3直线运动_css3动画--边框线条动画
- InstallShield 2010集成 net Framework 4的安装包制作
- 报错:Parameter ‘XXX‘ implicitly has an ‘any‘ type.解决方法