android与php登录,Android开发中使用PHP服务器怎么实现一个登录功能
Android开发中使用PHP服务器怎么实现一个登录功能
发布时间:2020-11-20 15:33:46
来源:亿速云
阅读:98
作者:Leah
Android开发中使用PHP服务器怎么实现一个登录功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
Android客户端和PHP、MySQL搭建的服务器之间的简单交互,实现登录功能 。
实现原理图:
Handler消息机制原理:
Handler机制主要包括4个关键对象,分别是Message、Handler、MessageQueue、Looper。
下面对这4个关键对象进行简单的介绍。
1.Message
Message是线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。Message的what字段可以用来携带一些整型数据,obj字段可以携带一个Object对象。
2.Handler
Handler就是处理者的意思,它主要用于发送消息和处理消息。一般使用Handler对象的sendMessage()方法发送消息,发出的消息经过一系列的辗转处理后,最终会传递到Handler对象的HandlerMessage()方法中。
3.MessageQueue
MessageQueue是消息队列的意思,它主要用来存放通过Handler发送的消息。通过Handler发送的消息会存在MessageQueue中等待处理。每个线程中只会有一个MessageQueue对象。
4.Looper
Looper是每个线程中的MessageQueue的管家。调用Looper的loop()方法后,就会进入一个无限循环中。然后,每当发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的HandlerMessage()方法中。此外,每个线程也只会有一个Looper对象。在主线程中创建Handler对象时,系统已经创建了Looper镀锌,所以不用手动创建Looper对象,而在子线程中的Handler对象,需要调用Looper.loop()方法开启消息循环。
图中可以清晰的看到整个Handler消息机制处理流程。Handler消息处理首先需要在UI线程创建一个Handler对象,然后在子线程中调用了sendMessage()方法,接着这个消息会存放在UI线程的MessageQueue中,通过Looper对象取出MessageQueue中的消息,最后分发回Handler的HandMessage()方法中。
下面是我写的代码以及本程序的logcat的运行结果。
本次任务中遇到的难题:
无法连接到PHP服务器。实现了把自己输入的用户名和密码封装成了JSON但是无法发送到PHP进行与数 据库的比对。
package com.itcast.test03;
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.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText et_username;
private EditText et_userPsd;
private Button login;
private Button signUp;
private CheckBox save;
private String user,pass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_username = (EditText)findViewById(R.id.et_number);
et_userPsd = (EditText)findViewById(R.id.et_password);
login=(Button)findViewById(R.id.login);
signUp=(Button)findViewById(R.id.signUp);
save = (CheckBox)findViewById(R.id.save);
//登录按钮的点击事件
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//将输入的用户名和密码转换成字符串
String name =et_username.getText().toString();
String pwd = et_userPsd.getText().toString();
//调用login方法
login(name, pwd);
}
});
}
private void login(final String name, final String pwd){
//创建Handler对象
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
if(msg.what == 1){
Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
//提示登陆成功
finish();
}else if(msg.what == 0){
Log.i(name, msg.toString());
}else if(msg.what == -1){
Log.i("==============",msg.toString());
}
}
};
new Thread(){
public void run() {
//创建Message对象
Message msg =new Message();
try {
Post po = new Post();
String infoo = po.logina(name, pwd);
if(infoo != null){
msg.what = 1;//成功
msg.obj = infoo;
}else{
msg.what = 0;//失败
msg.obj = "2";
}
} catch (Exception e) {
e.printStackTrace();
msg.what = -1;
msg.obj = e;
}
handler.sendMessage(msg);
}
}.start();
}
}
package com.itcast.test03;
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class Post {
public String logina(String name, String pwd)throws ParseException, IOException, JSONException{
//获取到HttpClient对象
HttpClient httpClient = new DefaultHttpClient();
String strurl = "http://10.6.78.213:2016/xampp/sse/index.php/home/Index/server_info";
HttpPost request = new HttpPost(strurl);
request.addHeader("Accept","application/json");
request.addHeader("Content-Type","application/json");//还可以自定义增加header
JSONObject param = new JSONObject();//定义json对象
param.put("sequenceId", "87620056570355357690");
param.put("accType", "0");
param.put("loginId", name);
param.put("password", pwd);
//param.put("thirdpartyAppId", "");
//param.put("thirdpartyAccessToken", "");
param.put("loginType", "1");
Log.i("===========", param.toString());
System.out.println("1+===========");
StringEntity se = new StringEntity(param.toString());
request.setEntity(se);//发送数据
HttpResponse httpResponse = httpClient.execute(request);//获得相应
System.out.println("2+===========");//进行一行一行的调试时无法打印此语句。原因就是无法成功连接到 网络
int code = httpResponse.getStatusLine().getStatusCode();
System.out.print(code);
String result = EntityUtils.toString(httpResponse.getEntity());
JSONObject result1 = new JSONObject(result);
String info = (String) result1.get("retInfo");
Log.i("=============", info);
return info;
}
}
关于Android开发中使用PHP服务器怎么实现一个登录功能问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
android与php登录,Android开发中使用PHP服务器怎么实现一个登录功能相关推荐
- 您选择的用户登录名已在该企业中使用,请选在另一个登录名,然后再试
AD域中新建用户,输入用户登录名后提示: "你选择的用户登录名已在该企业中使用.请选择另一个登录名" 但是在整个目录中搜索用户登录名搜索不到
- Android开发中父类与子类通讯的一个简单实现
在给出解决方案之前,提出一个问题:Android开发中如何将父类的改变及时通知给子类? 好吧,开始抓耳挠腮,可算是找出了解决方案: 1.在子类内注册父类的监听器 2.通过广播接收者(Broadcast ...
- android treeview 树形结构,前端开发中,使用TreeView控件创建树形结构
原标题:前端开发中,使用TreeView控件创建树形结构 Wijmo是一款使用Type编写的新一代Java/HTML5控件集.它秉承触控优先的设计理念,在全球率先支持AngularJS,并提供性能卓越 ...
- android java 调用栈_Android开发中打印方法调用栈
概要 在日常开发和debug的过程中,我们都需要看看某一个方法的调用StackTrace,如果是crash或者异常被抛出的情况下会直接看到对应的StackTrace,如: 39 5939 E Andr ...
- android usb设置波特率,USB开发中设置波特率
最近在做Android设备与外设通信,需要用的串口通信.如果使用android-serialport-api发现Android设备需要获取root权限,否则会报权限不足的异常.所以决定使用Androi ...
- android 画布旋转,Android-在安卓开发中,如何实现一个简单的图片旋转
图像的旋转有很多方法,除了常见的使用动画和矩阵,还可以通过操作背景画布本身来旋转 现将正常的图像绘制到画布中,保存一次画布后整体旋转,然后再恢复画布,此时的图像便得到了旋转的效果,google 官方也 ...
- android mvp模式例子_Android开发中的MVP模式概念以及网络请求实现顺序
MVP模式 三层 1.view 2.presenter 3.model View 1.view职责,继承view接口,实现方法,持有presenter,this传入presenter Presente ...
- android udp获取ip,安卓开发 局域网UDP获取服务器Ip地址
try { mHandler.post(new myRunnable("开始UDP连接")); InetAddress serverAddress = InetAddress.ge ...
- php 数组与数组之间去重,PHP开发中一维数组与二维数组去重功能实现教程
本篇文章讲述了PHP实现一维数组与二维数组去重功能示例.希望对在php学习和开发的同学有所帮助! 数组中重复项的去除 一维数组的重复项: 使用array_unique函数即可,使用实例如下: ? $a ...
- 关于微信小程序开发中的显示个人信息以及重置密码功能
最近我们学习了微信小程序中的显示个人信息以及重置密码,因为是老师做好的接口,所以我们只需要搭好前台页面以及编写好JS代码就可以了. 以上是显示个人信息的页面,包含了用户的学号,姓名,系别,班级(因为是 ...
最新文章
- Unity3D脚本属性
- JS数组方法汇总 array数组元素的添加和删除
- 北交的计算机和北理,北航与北理
- nineoldandroid使用_nineoldandroid 详细使用并且实现drawerlayout侧滑动画
- java 计算机开始时间,关于计算Java程序运行时间
- 服务器磁盘扩展容量操作流程
- Java Servlet request
- C++调用CMD,等CMD运行完后继续运行C++
- 【系列三之CentOS系列】CentOS命令操作(2)
- 自然语言处理入门新手上路
- 【MySQL】MySQL中的死锁
- 在renderman中使用raytrace 计算fur的项目
- Origin: Piper diagram/Trilinear diagram (三线图)
- xp系统usb android,xp系统usb网络共享怎么设置,xp系统usb手机网络共享设置方法
- html5编辑文章如何缩进,关于网页排版和文章编辑那些事
- 华三交换机如何进入配置_华三交换机配置方法及操作案例
- 我的macOS常用软件清单
- matlab cond函数
- html和word相互转换
- PowerShell:无法加载文件 XXXXXXX,因为在此系统上禁止运行脚本