java - 如何使用 android studio 和 php mysql 验证登录用户
问题描述
嗨,这是我用来登录 myqsl 的代码,它用于注册
但是当我点击登录时,它会使我的应用程序崩溃,并出现以下错误。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
public class BackgroundTask extends AsyncTask<String,Void,String>
{
AlertDialog alertDialog;
Context ctx;
public BackgroundTask(Context ctx) {
this.ctx=ctx;
}
@Override
protected void onPreExecute() {
alertDialog= new AlertDialog.Builder(ctx).create();
alertDialog.setTitle("LOg in information");
}
@Override
protected String doInBackground(String... params) {
String reg_url="http://10.0.2.2/webApp/register.php";
String login_url="http://10.0.2.2/webApp/login.php";
String method=params[0];
if (method.equals("register")){
String name=params[1];
String user_name=params[2];
String user_pass=params[3];
try {
URL url= new URL(reg_url);
HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
//to write the information
OutputStream os= httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new
OutputStreamWriter(os,"UTF-8"));
String data= URLEncoder.encode("user","UTF-8")+"="+ URLEncoder.encode(name,"UTF-8")+ "&"+
URLEncoder.encode("user_name","UTF-8")+"="+ URLEncoder.encode(user_name,"UTF-8")+ "&"+
URLEncoder.encode("user_pass","UTF-8")+"="+ URLEncoder.encode(user_pass,"UTF-8");
bufferedWriter.write(data);
bufferedWriter.flush();
bufferedWriter.close();
os.close();
InputStream is= httpURLConnection.getInputStream();
is.close();
return "Registration Sucess";
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
else if (method.equals("login"))
{
String login_name=params[1];
String login_pass=params[2];
try {
URL url=new URL(login_url);
HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
OutputStream outputStream= httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter= new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8"));
String data= URLEncoder.encode("login_name","UTF-8")+"="+URLEncoder.encode(login_name,"UTF-8")+"&"+
URLEncoder.encode("login_pass","UTF-8")+"="+URLEncoder.encode(login_pass,"UTF-8");
bufferedWriter.write(data);
bufferedWriter.flush();
bufferedWriter.close();
outputStream.close();
InputStream inputStream= httpURLConnection.getInputStream();
BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return "login Sucess";
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
if (result.equals("Registration Sucess")){
Toast.makeText(ctx, result, Toast.LENGTH_SHORT).show();
}
else if (result.equals("login Sucess")){
Toast.makeText(ctx, result, Toast.LENGTH_SHORT).show();
}
}
}
错误日志猫:
2020-05-10 15:09:44.194 8130-8130/com.manith.mysqlapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.manith.mysqlapp, PID: 8130
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at com.manith.mysqlapp.BackgroundTask.onPostExecute(BackgroundTask.java:124)
at com.manith.mysqlapp.BackgroundTask.onPostExecute(BackgroundTask.java:22)
at android.os.AsyncTask.finish(AsyncTask.java:695)
at android.os.AsyncTask.-wrap1(Unknown Source:0)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
登录PHP代码:
<?php
include"init.php";
session_start();
$user_name=$_POST["login_name"];
$user_pass=$_POST["login_pass"];
$sql_query = "select name from user_info where user_name like '$user_name'
and user_pass like '$user_pass';";
$result =mysqli_query($conn,$sql_query);
if(mysqli_num_rows($result)>0)
{
$row=mysqli_fetch_assoc($result);
$name =$row["name"];
echo "Login Sucess... Welcome ".$name.";
}
else
{
echo "Login Failed.. Try Again";
}
解决方案
推荐阅读
- reactjs - 一旦 useSelector 钩子返回一个值,有没有办法重新渲染 React-Select 组件?
- presto - presto 中的日期范围,而 varchar
- c# - 使用 Visual Studio 启动以 .net 标准 2.1 编写的应用程序
- flutter - 如何将异步错误记录到控制台而不是在颤动中显示 ErrorWidget?
- java - 如何将转义的 [aabb] 传递给 java 中的 replaceAll() 方法?
- django - 在 djangocms-picture 如何设置默认的最大图像尺寸?
- angular - 世界地图未显示 - Angular Highcharts
- node.js - 运行 Yarn 时缺少权限
- sql - 通过 informatica 执行多个 select 语句并为每个 select 查询生成提取文件
- c# - 如何在 .net 中的 wwwroot 内的多个文件夹中提供 html 文件