Ошибка при вводе имени пользователя и пароля в приложение для входа в Android с использованием базы данных phpmyadmin - PullRequest
0 голосов
/ 30 сентября 2018

Поэтому, когда я попытался вставить имя пользователя и пароль, которые уже находятся в базе данных phpmyadmin, он получает вывод тоста, который находится в onErrorResponse (ошибка VolleyError), и когда я увидел Logcat, он говорит:

09-30 19:25:34.535 18067-18364/com.example.devarsh.googlemapsbustracker E/Volley: [7269] NetworkDispatcher.processRequest: Unhandled exception java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at com.example.devarsh.googlemapsbustracker.MainActivity$4.getParams(MainActivity.java:91)
    at com.android.volley.Request.getBody(Request.java:464)
    at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:275)
    at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:249)
    at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:94)
    at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:123)
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:131)
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)
    at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)
09-30 19:25:34.552 18067-18067/com.example.devarsh.googlemapsbustracker E/MainActivity: com.android.volley.VolleyError: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference

Я уже пытался жестко скрыть имя пользователя и пароль в своем скрипте php, но он не работал для меня

Вот код Android:

package com.example.devarsh.googlemapsbustracker;


import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GoogleApiAvailability;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

private static final String TAG = "MainActivity";
private static final int ERROR_DIALOG_REQUEST = 9001;
private Button btnlogin;
private EditText User_name, Pass_word;
private static String URL_LOGIN = "http://192.168.50.127/Android/login.php";




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnlogin = findViewById(R.id.button2);
    User_name =  findViewById(R.id.username);
    Pass_word =  findViewById(R.id.password);


    btnlogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Login();
        }
    });


    isServicesOK();
}

private void Login(){

    String URL = "http://192.168.2.8/parul/login.php";
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

            if(response.trim().equals("success")){
                Toast.makeText(getApplicationContext(), "Login Successfull", Toast.LENGTH_LONG).show();
                Intent intent = new Intent(getApplicationContext(), Selection_Activity.class);
                startActivity(intent);
            }else{
                Toast.makeText(getApplicationContext(), "Login Failed", Toast.LENGTH_LONG).show();
            }

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getApplicationContext(), "Login Unsuccessfull", Toast.LENGTH_LONG).show();
            Log.e(TAG, String.valueOf(error));
            System.out.println("VolleyError start : " + error + ": End of VolleyError");
        }
    }) {
        @Override
        protected Map<String, String> getParams() {

            user = User_name.getText().toString().trim();
            pass = Pass_word.getText().toString().trim();

            Map<String, String> params = new HashMap<>();
            params.put("UserName", User_name.getText().toString().trim());
            params.put("PassWord", Pass_word.getText().toString().trim());

            return params;
        }
    };

    requestQueue.add(stringRequest);

}


public void isServicesOK() {
    Log.d(TAG, "isServicesOK: checking google services version");

    int available = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this);

    if(available == ConnectionResult.SUCCESS){
        //everything is fine and user can make map request
        Log.d(TAG, "isServicesOK: Google Play Services is working");
    }
    else if(GoogleApiAvailability.getInstance().isUserResolvableError(available)){
        //there is an error but we can fix it
        Log.d(TAG, "isServicesOK: An error is there but we can fix it");
        Dialog dialog = GoogleApiAvailability.getInstance().getErrorDialog(this, available, ERROR_DIALOG_REQUEST);
        dialog.show();
    }else{
        Toast.makeText(this, "We cant make maps request", Toast.LENGTH_SHORT).show();
    }
}

}

А вот мой скрипт php, который используется дляполучить имя пользователя и пароль из приложения, чтобы проверить, существует ли он в базе данных или нет, и этот код предназначен для базы данных Localhost с использованием Xampp:

<?php
$conn = mysqli_connect("localhost","root","","users");
mysqli_query($conn, "SET NAMES 'utf8'");

$username = "parul";
$password = "parul1998";

$query = 'SELECT id FROM logintb WHERE username = "'.$username.'" and password = "'.$password.'"';
$result = mysqli_query($conn,$query) or die('error: ' .mysql_error());

if(mysqli_num_rows($result) == 1){

    echo "success";
}else{
    echo "error";
}


?>

Приведенный ниже код используется для тестирования приложения с живым 000webhosting:

<?php
$conn = mysqli_connect("localhost","id7263189_root","dev@1234","id7263189_logintb");
mysqli_query($conn, "SET NAMES 'utf8'");

$username = $_POST["UserName"];
$password = $_POST["PassWord"];

$query = 'SELECT id FROM logintb WHERE username = "'.$username.'" and password = "'.$password.'"';
$result = mysqli_query($conn,$query) or die('error: ' .mysql_error());

if(mysqli_num_rows($result) == 1){

    echo "success";
}else{
    echo "error";
}


?>

Я не знаю, как решить этот виртуальный метод вызова:

com.android.volley.VolleyError: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference

К вашему сведению, я проверяю это на реальном устройстве.но когда я хардкорный имя пользователя и пароль в файле php и запускаю приложение в эмуляторе, он работает нормально, но когда я попробовал на реальном устройстве, он показывает тост входа в систему неудачно.

Когда я пытаюсь запустить это приложение вЭмулятор работает нормально без каких-либо ошибок, но когда я пробую его в реальном устройстве, он показывает эту ошибку от OnerrorResponse (VolleyError error), которая является тостом за неудачный вход в систему

Я новичок в разработке приложений для Android, так что нужно немногопомощь от любого, кто может решить эту проблему для меня.

Мой код activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hardwareAccelerated="true"
android:background="@color/white"
tools:context=".MainActivity">

<View
    android:id="@+id/view2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:hardwareAccelerated="true" />


<ImageView
    android:id="@+id/imageView2"
    android:contentDescription="@string/todo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="76dp"
    android:background="@color/blend"
    app:srcCompat="@drawable/imagelogo" />

<EditText
    android:id="@+id/username"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="252dp"
    android:ems="10"
    android:hint="@string/User_name"
    android:importantForAutofill="no"
    android:inputType="text" />

<EditText
    android:id="@+id/password"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="186dp"
    android:ems="10"
    android:hint="@string/Pass_word"
    android:importantForAutofill="no"
    android:inputType="textPassword" />

<Button
    android:id="@+id/button2"
    android:layout_width="210dp"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentBottom="true"
    android:layout_marginStart="81dp"
    android:layout_marginBottom="112dp"
    android:background="@color/colorPrimary"
    android:text="@string/login" />


</RelativeLayout>

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018
 @Override
        protected Map<String, String> getParams() {
            User_name =  findViewById(R.id.username);
            Pass_word =  findViewById(R.id.password);
            user = User_name.getText().toString().trim();
            pass = Pass_word.getText().toString().trim();

            Map<String, String> params = new HashMap<>();
            params.put("UserName", user);  // direct use user
            params.put("PassWord", pass);  // direct use pass

            return params;
        }

обновите свой getParams метод поиска представлений внутри него, это не лучший подход, но почему бы вам не попробовать.

Удалить

android:importantForAutofill="no"

и

android:ems="10"

из текста редактирования

0 голосов
/ 30 сентября 2018
com.android.volley.VolleyError: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference

Это может произойти, потому что EditText, из которого вы пытаетесь получить текст, пуст.Но интересным моментом является то, что вы сказали, что он работает на эмуляторе.

Единственное решение, которое мы можем предложить, - это использовать и получать строки из EditText s следующим образом:

String user = User_name.getText().toString().trim();
String pass = Pass_word.getText().toString().trim();

Объявление переменных внутри Map, вероятно, может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...