Android注册/登录

时间:2016-08-24 04:26:21

标签: java android login

我完全是Android应用程序开发的初学者。所以我决定去一个简单的应用程序(Signin / SignUp)。我当然不知道是什么原因导致错误所以这里是完整的代码。当我点击注册或登录按钮导致“不幸的应用程序停止运行错误”。 Plz任何人指出我正确的方向。

MainActivity.java

package com.example.kyokesh.ams1;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends Activity {
EditText email,password;
Button signup, signin;
SQLiteDatabase db;
Cursor c;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    email = (EditText) findViewById(R.id.ETemail);
    password = (EditText) findViewById(R.id.ETpassword);
    signin = (Button) findViewById(R.id.Bsignin);
    signup = (Button) findViewById(R.id.Bsignup);

    signup.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, Signup.class);
            startActivity(intent);
        }
    });

    signin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            String s1 = email.getText().toString();
            String s2 = password.getText().toString();
            db = openOrCreateDatabase("mydatabase.db", MODE_PRIVATE, null);
            c = db.rawQuery("select name from UserData where password ='" + s2 + "' && email='"+s1+"'",null);
            if (c.getCount() == 0) {
                Toast.makeText(getApplicationContext(), "Login Successful", Toast.LENGTH_SHORT).show();

                c.close();
                db.close();
                Intent i1 = new Intent(MainActivity.this, Signup.class);
                startActivity(i1);
            }


        }
    });
}}

Signup.java

package com.example.kyokesh.ams1;

import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.util.Objects;

public class Signup extends Activity {
EditText name,email,password,cpassword;
Button register;
SQLiteDatabase db;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);
    name = (EditText) findViewById(R.id.ETname);
    email = (EditText) findViewById(R.id.ETemail);
    password = (EditText) findViewById(R.id.ETpassword);
    cpassword = (EditText) findViewById(R.id.ETcpassword);
    final String s1 = name.getText().toString();
    final String s2 = email.getText().toString();
    final String s3 = password.getText().toString();
    final String s4 = cpassword.getText().toString();
    register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            db = openOrCreateDatabase("mydatabse.db", MODE_PRIVATE, null);
            if (Objects.equals(s1, s2)) {
                db.execSQL("create table if not exists UserData(name varchar,email varchar,password varchar,cpassword varchar);");
                db.execSQL("insert into UserData '" + s1 + "','" + s2 + "','" + s3 + "','" + s4 + "');");
                Toast.makeText(getApplicationContext(), "Sign Up   Successful", Toast.LENGTH_SHORT).show();
                Intent main = new Intent(Signup.this, MainActivity.class);
            } else {
                Toast.makeText(getApplicationContext(), "Password doesn't    match confirmation", Toast.LENGTH_SHORT).show();
                Intent intent = getIntent();
                finish();
                startActivity(intent);
            }
        }
    });
}
}

XML

content_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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.kyokesh.ams1.MainActivity"
tools:showIn="@layout/activity_main">

<RelativeLayout
    tools:context="com.example.kyokesh.ams.MainActivity"
    tools:showIn="@layout/activity_main"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true">

    <Button
        android:layout_width="176dp"
        android:layout_height="wrap_content"
        android:text="Sign In"
        android:id="@+id/Bsignin"
        android:layout_marginTop="45dp"
        android:backgroundTint="#1e88e5"
        android:clickable="false"
        android:layout_below="@+id/ETpassword"
        android:layout_centerHorizontal="true"
        android:nestedScrollingEnabled="false" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:ems="10"
        android:id="@+id/ETemail"
        android:text="E-mail"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="49dp" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:ems="10"
        android:id="@+id/ETpassword"
        android:text="Password"
        android:layout_below="@+id/ETemail"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <Button
        android:layout_width="176dp"
        android:layout_height="wrap_content"
        android:text="New? Sign Up here"
        android:id="@+id/Bsignup"
        android:backgroundTint="#1e88e5"
        android:clickable="false"
        android:onClick="onSignUpClick"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>
</RelativeLayout>

content_signup.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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.kyokesh.ams1.Signup"
tools:showIn="@layout/activity_signup">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Name"
    android:id="@+id/textView"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="textPersonName"
    android:ems="10"
    android:id="@+id/ETname"
    android:layout_alignParentEnd="true"
    android:layout_below="@+id/textView"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="E-mail"
    android:id="@+id/textView2"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/ETname"
    android:layout_centerHorizontal="true" />

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="textEmailAddress"
    android:ems="10"
    android:id="@+id/ETemail"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/textView2"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Password"
    android:id="@+id/textView3"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/ETemail"
    android:layout_centerHorizontal="true" />

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:ems="10"
    android:id="@+id/ETpassword"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/textView3"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Confirm Password"
    android:id="@+id/textView4"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/ETpassword"
    android:layout_centerHorizontal="true" />

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:ems="10"
    android:id="@+id/ETcpassword"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/textView4"
    android:layout_centerHorizontal="true" />

<Button
    android:layout_width="176dp"
    android:layout_height="wrap_content"
    android:text="Register"
    android:id="@+id/button"
    android:backgroundTint="#1e88e5"
    android:clickable="false"
    android:onClick="onSignUpClick"
    android:layout_below="@+id/ETcpassword"
    android:layout_centerHorizontal="true" />
</RelativeLayout>

Logcat错误日志:

08-24 09:05:44.393 6017-6017/? I/art: Not late-enabling -Xcheck:jni (already  on)
08-24 09:05:44.462 6017-6017/? I/art: Late-enabling JIT
08-24 09:05:44.501 6017-6017/? I/art: JIT created with  code_cache_capacity=2MB compile_threshold=1000
08-24 09:05:44.720 6017-6017/com.example.kyokesh.ams1 W/System: ClassLoader referenced unknown path: /data/app/com.example.kyokesh.ams1-1/lib/x86
08-24 09:05:44.987 6017-6028/com.example.kyokesh.ams1 W/art: Suspending all threads took: 14.435ms
08-24 09:05:44.994 6017-6028/com.example.kyokesh.ams1 I/art: Background sticky concurrent mark sweep GC freed 11075(515KB) AllocSpace objects, 0(0B) LOS  objects, 72% free, 682KB/2MB, paused 16.779ms total 142.291ms
08-24 09:05:45.037 6017-6039/com.example.kyokesh.ams1 D/OpenGLRenderer: Use  EGL_SWAP_BEHAVIOR_PRESERVED: true
08-24 09:05:45.093 6017-6039/com.example.kyokesh.ams1 I/OpenGLRenderer:   Initialized EGL, version 1.4
08-24 09:05:45.159 6017-6039/com.example.kyokesh.ams1 W/EGL_emulation: eglSurfaceAttrib not implemented
08-24 09:05:45.159 6017-6039/com.example.kyokesh.ams1 W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xad924be0, error=EGL_SUCCESS
08-24 09:05:46.282 6017-6017/com.example.kyokesh.ams1 D/AndroidRuntime: Shutting down VM
08-24 09:05:46.282 6017-6017/com.example.kyokesh.ams1 E/AndroidRuntime:   FATAL EXCEPTION: main
                                                                    Process:          com.example.kyokesh.ams1, PID: 6017
                                                                      java.lang.RuntimeException: Unable to start activity   ComponentInfo{com.example.kyokesh.ams1/com.example.kyokesh.ams1.Signup}: java.lang.NullPointerException: Attempt to invoke virtual method 'void    android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                                        at   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                                        at   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                        at  android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                        at   android.os.Handler.dispatchMessage(Handler.java:102)
                                                                         at   android.os.Looper.loop(Looper.java:148)
                                                                        at   android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                        at    java.lang.reflect.Method.invoke(Native Method)
                                                                          at    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                        at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                     Caused   by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on   a null object reference
                                                                         at  com.example.kyokesh.ams1.Signup.onCreate(Signup.java:34)
                                                                        at  android.app.Activity.performCreate(Activity.java:6237)
                                                                         at  android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                                        at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                                                                        at  android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                        at  android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                        at  android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                        at  android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                        at  android.os.Looper.loop(Looper.java:148) 
                                                                        at  android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                        at  java.lang.reflect.Method.invoke(Native Method) 
                                                                        at  com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                        at  com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
08-24 09:05:48.300 6017-6017/com.example.kyokesh.ams1 I/Process: Sending signal. PID: 6017 SIG: 9

2 个答案:

答案 0 :(得分:1)

至少对于您的SignUp活动,您应该获得空指针异常,因为您尚未初始化register按钮并且仍然在对象上调用setOnClickListener。您可以在调用setOnClickListener之前添加此行来修复它:

register = (Button) findViewById(R.id.button);

答案 1 :(得分:0)

根据错误日志

  

引起:java.lang.NullPointerException:尝试调用虚拟   方法'无效   android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)”   在空对象引用上

您正在设置,

register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
}

没有类型转换注册按钮。要解决此问题,请初始化按钮

register = (Button) findViewById(R.id.Bsignin);

在向其添加 setOnClickListener()之前。

关于下一个问题,要在成功登录时转到下一个活动,请更改以下代码,

    register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                db = openOrCreateDatabase("mydatabse.db", MODE_PRIVATE, null);
                if (Objects.equals(s1, s2)) {
                    db.execSQL("create table if not exists UserData(name varchar,email varchar,password varchar,cpassword varchar);");
                    db.execSQL("insert into UserData '" + s1 + "','" + s2 + "','" + s3 + "','" + s4 + "');");
                    Toast.makeText(getApplicationContext(), "Sign Up   Successful", Toast.LENGTH_SHORT).show();

                    Intent main = new Intent(Signup.this,MainActivity.class);
                    startActivity(main);
                    finish();
                } else {
                    Toast.makeText(getApplicationContext(), "Password doesn't    match confirmation", Toast.LENGTH_SHORT).show();
                }
            }
        });