Hacan Champ
Hacan Champ

Reputation: 53

Java lang IllegalStateException

I am new in android. I am trying to make simple login activity but I am getting run time error when I click on Login button. I think I am not getting data correctly.I have check and there is a data in SQLite in corresponding to that PK.

logcat.

FATAL EXCEPTION: main
                                                                          Process: com.example.champ.remindme, PID: 4043
java.lang.IllegalStateException: Could not execute method for android:onClick
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:289)
    at android.view.View.performClick(View.java:4780)
    at android.view.View$PerformClick.run(View.java:19866)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5254)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
    at android.view.View.performClick(View.java:4780) 
    at android.view.View$PerformClick.run(View.java:19866) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5254) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[])' on a null object reference
    at com.example.champ.remindme.Login.LogIn(Login.java:45)
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
    at android.view.View.performClick(View.java:4780) 
    at android.view.View$PerformClick.run(View.java:19866) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5254) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

java code.

package com.example.champ.remindme;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Login extends AppCompatActivity {
EditText edtUsername, edtPass;
String Username,Password;
int counter=3;
Button LoginButton;
SQLiteDatabase db;
// TextView txtAttempts;
//private final int interval = 3000;
/*private Runnable runnable = new Runnable(){
    public void run() {
        LoginButton.setEnabled(true);
    }
}; */
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    LoginButton= (Button)findViewById(R.id.LoginButton);
    edtUsername=(EditText)findViewById(R.id.edtitem);
   // Username=edtUsername.getText().toString();
    edtPass=(EditText)findViewById(R.id.password);
}


public void LogIn(View v){
    if((edtUsername.getText().toString().trim().length()==0)||(edtPass.getText().toString().trim().length()==0))
    {
        showMessage("Error", "Please enter the empty Text Box");
        return;
    }

    Cursor c=db.rawQuery("SELECT * FROM User WHERE Username='"+ edtUsername.getText()+"'", null);
    if(c.moveToFirst())
    {
        Username=c.getString(1);
        Password=c.getString(2);

        if (edtUsername.getText().toString().equals(Username) && edtPass.getText().toString().equals(Password)){
            Toast.makeText(Login.this, "Login Successful", Toast.LENGTH_LONG).show();
            Intent intent = new Intent(this, Menu.class);
            intent.putExtra("Username",Username);
            startActivity(intent);
        }
        else {
            Toast.makeText(Login.this, "Login Failed", Toast.LENGTH_LONG).show();
            counter--;
        }
        // txtAttempts.setText("Attempts Left: " + counter);

        if (counter == 0) {
            LoginButton.setEnabled(false);
            //      new Timer().schedule((TimerTask) runnable,interval);
        }
    }
    else
    {
        showMessage("Error", "Invalid Username");
    }
/*-----------------------------------------------------------------*/

}

public void Signup(View v) {
    Intent intent = new Intent(this, SignUp.class);
    startActivity(intent);
}

public void showMessage(String title,String message)
{
    AlertDialog.Builder builder=new AlertDialog.Builder(this);
    builder.setCancelable(true);
    builder.setTitle(title);
    builder.setMessage(message);
    builder.show();
}

}

XML code.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.champ.remindme.Login"
android:background="@drawable/back">


<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageView2"
    android:src="@drawable/remind_me_logo"
    android:contentDescription="Logo" />
<EditText
    android:id="@+id/edtitem"
    android:layout_width="265dp"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:background="@drawable/username_rounded_edited_text"
    android:inputType="text"
    android:hint="Username"
    android:textAlignment="center"
    android:layout_marginTop="37dp"
    android:layout_below="@+id/imageView2"
    android:layout_centerHorizontal="true" />
<EditText
    android:id="@+id/password"
    android:layout_width="265dp"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:background="@drawable/pass_rounded_edited_text"
    android:inputType="text"
    android:hint="Password"
    android:textAlignment="center"

    android:layout_below="@+id/edtitem"
    android:layout_centerHorizontal="true" />

<Button
    android:id="@+id/LoginButton"
    android:background="@drawable/blue_botton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/login"
    style="@style/ButtonText"
    android:onClick="LogIn"
    android:layout_below="@+id/password"
    android:layout_alignLeft="@+id/password"
    android:layout_alignStart="@+id/password"
    android:layout_alignRight="@+id/password"
    android:layout_alignEnd="@+id/password" />
<Button
    android:id="@+id/txtSignup"
    android:background="@drawable/blue_botton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Signup"
    style="@style/ButtonText"
    android:onClick="Signup"
    android:layout_below="@+id/LoginButton"
    android:layout_alignLeft="@+id/LoginButton"
    android:layout_alignStart="@+id/LoginButton" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageView3"
    android:src="@drawable/fb_loging"
    android:layout_alignBottom="@+id/txtSignup"
    android:layout_toRightOf="@+id/txtSignup"
    android:layout_toEndOf="@+id/txtSignup" />
</RelativeLayout>

Upvotes: 0

Views: 2309

Answers (2)

Azhar osws
Azhar osws

Reputation: 188

You didn't initialize db before using it. Add this to your onCreate()..

SQLiteDatabase db = this.getWritableDatabase();

Upvotes: 2

user6363583
user6363583

Reputation: 104

Nothing to do. Just in your XML file's Button attribute remove

android:onClick

And in your activity type:-

LoginButton.setOnClickListener(new OnClickListener(){
@Override
    onClick(){
        LogIn();
      }
});

I also faced this problem. Yeah, I know that your process is also not wrong. But the truth is I just don't know why that process doesn't work (for me). But when I implement onClick method programmatically then it works like a charm. And I hope you will also get your code working

And also add onCreate method

db = getWritableDatabase();

Upvotes: 2

Related Questions