Java 按下登录按钮时强制关闭
我有一个项目,当我运行它时,我按下登录按钮,我的应用程序总是强制关闭,但如果我再次启动我的应用程序,登录状态为true。 错误信息是:Java 按下登录按钮时强制关闭,java,android,login,Java,Android,Login,我有一个项目,当我运行它时,我按下登录按钮,我的应用程序总是强制关闭,但如果我再次启动我的应用程序,登录状态为true。 错误信息是: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference at com.farid.starsru
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at com.farid.starsrunway.login.LoginActivity$Masuk.onPostExecute(LoginActivity.java:126)
at com.farid.starsrunway.login.LoginActivity$Masuk.onPostExecute(LoginActivity.java:81)
at android.os.AsyncTask.finish(AsyncTask.java:667)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6157)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)
这是我的舱单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.farid.starsrunway">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".login.LoginActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".login.RegisterActivity"
android:label="Register New User">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".login.LoginActivity" />
<intent-filter>
<action android:name="android.intent.action.DETAIL" />
<category android:name="android.intent.category.DETAIL" />
</intent-filter>
</activity>
<activity
android:name=".MainmenuActivity"
android:label="Menu Utama">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".login.LoginActivity" />
<intent-filter>
<action android:name="android.intent.action.DETAIL" />
<category android:name="android.intent.category.DETAIL" />
</intent-filter>
</activity>
</application>
</manifest>
这是RequestHandler.java
package com.farid.starsrunway;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import javax.net.ssl.HttpsURLConnection;
public class RequestHandler {
//Metode Untuk mengirim httpPostRequest
//Metode ini mengambil 2 Argumen
//Metode Pertama adalah URL dari Skrip yang digunakan untuk mengirimkan permintaan
//Yang lainnya adalah HashMap dengan nilai pasangan nama yang berisi data yang akan dikirim dengan permintaan
public String sendPostRequest(String requestURL, HashMap<String, String> postDataParams) {
//Membuat URL
URL url;
//Objek StringBuilder untuk menyimpan pesan diambil dari server
StringBuilder sb = new StringBuilder();
try {
//Inisialisasi URL
url = new URL(requestURL);
//Membuat Koneksi HttpURLConnection
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//Konfigurasi koneksi
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
//Membuat Keluaran Stream
OutputStream os = conn.getOutputStream();
//Menulis Parameter Untuk Permintaan
//Kita menggunakan metode getPostDataString yang didefinisikan di bawah ini
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getPostDataString(postDataParams));
writer.flush();
writer.close();
os.close();
int responseCode = conn.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
sb = new StringBuilder();
String response;
//Reading server response
while ((response = br.readLine()) != null){
sb.append(response);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
public String sendGetRequest(String requestURL){
StringBuilder sb =new StringBuilder();
try {
URL url = new URL(requestURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String s;
while((s=bufferedReader.readLine())!=null){
sb.append(s).append("\n");
}
}catch(Exception ignored){
}
return sb.toString();
}
public String sendGetRequestParam(String requestURL, String id){
StringBuilder sb =new StringBuilder();
try {
URL url = new URL(requestURL+id);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String s;
while((s=bufferedReader.readLine())!=null){
sb.append(s).append("\n");
}
}catch(Exception ignored){
}
return sb.toString();
}
private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
for (Map.Entry<String, String> entry : params.entrySet()) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
return result.toString();
}
}
这是login.php
<?php
include "koneksi.php";
$user = $_GET["username"];
$pas = $_GET["password"];
$pass = md5($pas);
$query = "SELECT * FROM User WHERE Username='$user' AND Password='$pass' ";
$hasil = mysqli_query($con, $query);
if (mysqli_num_rows($hasil) > 0) {
$response = array();
$response["login"] = array();
while ($data = mysqli_fetch_array($hasil)){
$login['Id'] = $data['Id'];
$login['Type'] = $data['Type'];
$login['Username'] = $data['Username'];
$login['Password'] = $data['Password'];
array_push($response["login"], $login);
}
$response["success"] = benar;
echo json_encode($response);
} else {
$response["success"] = salah;
$response["message"] = "Tidak ada data";
echo json_encode($response);
}
?>
你能帮帮我吗。
我三天前试图解决这个问题,但我无法解决。这是因为在您的
LoginActivity.java
第124行中,if(success.equals(benar))
导致NullPointerException。根据我对你的代码的理解,如果你改变
success=null代码>到
success=“notbenar”//或者基本上是任何非空值
在第39行中,您的问题应该得到解决。Jacob是正确的,success.equals()抛出异常,因为它为null
doInBackground中应该抛出相同的异常,但您有一个捕获:
} catch (Exception e) {
Log.e("error", "tidak bisa ambil data 1");
}
实际上,您的日志应该指示success为null。我相信您在赋值时忘记了双引号
而不是使用:$response[“success”]=benar代码>
试试这个:$response[“success”]=“benar”代码>
再修改一下这个,
$response["success"] = salah;
$response["success"] = "salah";
这与关闭力无关。您的代码引发异常(NPE),因为您试图在某个地方访问非实例化变量的实例成员。@Farid请接受此答案,如果一切正常,请关闭此问题。谢谢,我的项目可以无错误登录并强制关闭。感谢所有回答我问题的人。请按我答案旁边的勾号图标接受答案。当它变为绿色时,表示答案已被接受。
package com.farid.starsrunway;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import javax.net.ssl.HttpsURLConnection;
public class RequestHandler {
//Metode Untuk mengirim httpPostRequest
//Metode ini mengambil 2 Argumen
//Metode Pertama adalah URL dari Skrip yang digunakan untuk mengirimkan permintaan
//Yang lainnya adalah HashMap dengan nilai pasangan nama yang berisi data yang akan dikirim dengan permintaan
public String sendPostRequest(String requestURL, HashMap<String, String> postDataParams) {
//Membuat URL
URL url;
//Objek StringBuilder untuk menyimpan pesan diambil dari server
StringBuilder sb = new StringBuilder();
try {
//Inisialisasi URL
url = new URL(requestURL);
//Membuat Koneksi HttpURLConnection
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//Konfigurasi koneksi
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
//Membuat Keluaran Stream
OutputStream os = conn.getOutputStream();
//Menulis Parameter Untuk Permintaan
//Kita menggunakan metode getPostDataString yang didefinisikan di bawah ini
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getPostDataString(postDataParams));
writer.flush();
writer.close();
os.close();
int responseCode = conn.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
sb = new StringBuilder();
String response;
//Reading server response
while ((response = br.readLine()) != null){
sb.append(response);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
public String sendGetRequest(String requestURL){
StringBuilder sb =new StringBuilder();
try {
URL url = new URL(requestURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String s;
while((s=bufferedReader.readLine())!=null){
sb.append(s).append("\n");
}
}catch(Exception ignored){
}
return sb.toString();
}
public String sendGetRequestParam(String requestURL, String id){
StringBuilder sb =new StringBuilder();
try {
URL url = new URL(requestURL+id);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String s;
while((s=bufferedReader.readLine())!=null){
sb.append(s).append("\n");
}
}catch(Exception ignored){
}
return sb.toString();
}
private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
for (Map.Entry<String, String> entry : params.entrySet()) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
return result.toString();
}
}
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "com.farid.starsrunway"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
<?php
include "koneksi.php";
$user = $_GET["username"];
$pas = $_GET["password"];
$pass = md5($pas);
$query = "SELECT * FROM User WHERE Username='$user' AND Password='$pass' ";
$hasil = mysqli_query($con, $query);
if (mysqli_num_rows($hasil) > 0) {
$response = array();
$response["login"] = array();
while ($data = mysqli_fetch_array($hasil)){
$login['Id'] = $data['Id'];
$login['Type'] = $data['Type'];
$login['Username'] = $data['Username'];
$login['Password'] = $data['Password'];
array_push($response["login"], $login);
}
$response["success"] = benar;
echo json_encode($response);
} else {
$response["success"] = salah;
$response["message"] = "Tidak ada data";
echo json_encode($response);
}
?>
} catch (Exception e) {
Log.e("error", "tidak bisa ambil data 1");
}
$response["success"] = salah;
$response["success"] = "salah";