2016-08-24 210 views
-1

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

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 
+0

在这里发表您LOCAT错误 – sushildlh

+0

这两个活动都登记在清单,对不对? – Shaishav

+0

请发布您的logcat错误日志! –

回答

1

至少你SignUp活动,你应该得到一个空指针异常,因为,你有没有初始化你register按钮,并仍在调用对象上setOnClickListener。您可以通过加入这一行调用setOnClickListener之前将其修复:

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

我不知道我错过了那个。谢谢。 任何想法,为什么我不能从我的MainActivity去下一页?当我点击注册或登录时,它总是以错误结尾 –

+0

@YokeshKdk当你点击SignIn屏幕时,你需要分享你的错误日志,同时也需要分享SignIn活动的代码。 – Shaishav

0

根据错误日志,

造成的:显示java.lang.NullPointerException:试图调用虚拟 法“无效 机器人.widget.Button.setOnClickListener(android.view.View $ OnClickListener)” 对空对象引用

您设置,

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

没有类型转换注册按钮。为了解决添加setOnClickListener()它在此之前初始化按钮

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

关于未来的问题,因为去到下一个活动的成功登录,更改如下代码,

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(); 
       } 
      } 
     });