2017-07-16 91 views
-4

我是一个新手,并试图为在线投票做一个android应用程序。我刚刚设计了布局,但不幸的是,我面临渲染问题和空指针异常。如何防止我的应用程序崩溃?

当我从MainActivity打开一个活动时,我只能看到一个白色屏幕!活动的顺序如下:

MainActivity --> Instructions or AdminLogin --> UserLogin or RegisterCandidate 

即使经过数小时的谷歌搜索,我无法找出确切的问题。我已经在StackOverflow本身检查了几个答案,但未能弄清楚什么是错的。

的错误跟踪,如下所示:

E/AndroidRuntime: FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.palakjain.onlinevotingschool/com.example.palakjain.onlinevotingschool.AdminLogin}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2360) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2412) 
     at android.app.ActivityThread.access$600(ActivityThread.java:162) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) 
     at android.os.Handler.dispatchMessage(Handler.java:107) 
     at android.os.Looper.loop(Looper.java:194) 
     at android.app.ActivityThread.main(ActivityThread.java:5388) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:525) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
     at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
     at com.example.suniljain.onlinevotingschool.AdminLogin.onCreate(AdminLogin.java:39) 
     at android.app.Activity.performCreate(Activity.java:5141) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1084) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2412)  
     at android.app.ActivityThread.access$600(ActivityThread.java:162)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)  
     at android.os.Handler.dispatchMessage(Handler.java:107)  
     at android.os.Looper.loop(Looper.java:194)  
     at android.app.ActivityThread.main(ActivityThread.java:5388)  
     at java.lang.reflect.Method.invokeNative(Native Method)  
     at java.lang.reflect.Method.invoke(Method.java:525)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)  
     at dalvik.system.NativeStart.main(Native Method) 

MainActivity代码:

public class MainActivity extends AppCompatActivity { 

Button btnConductVoting, btnInstructions, btnSkipInstructions; 

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

    btnConductVoting = (Button) findViewById(R.id.btnConductVoting); 
    btnInstructions = (Button) findViewById(R.id.btnInstructions); 
    btnSkipInstructions = (Button) findViewById(R.id.btnSkipInstructions); 

    btnConductVoting.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(MainActivity.this, AdminLogin.class); 
      startActivity(i); 
     } 
    }); 

    btnInstructions.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(MainActivity.this, Instructions.class); 
      startActivity(i); 
     } 
    }); 

    btnSkipInstructions.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(MainActivity.this, UserLogin.class); 
      startActivity(i); 
     } 
    }); 

} 
} 

指令的代码:

public class Instructions extends AppCompatActivity{ 
Button btnStartVoting; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    btnStartVoting = (Button) findViewById(R.id.btnStartVoting); 

    btnStartVoting.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(Instructions.this, UserLogin.class); 
      startActivity(i); 
     } 
    }); 
} 
} 

后台管理代码:

public class AdminLogin extends AppCompatActivity{ 

Button btnAdminLogin; 
EditText etUsername; 
EditText etPassword; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    btnAdminLogin = (Button) findViewById(R.id.btnAdminLogin); 
    etUsername = (EditText) findViewById(R.id.etAdminPassword); 
    etPassword = (EditText) findViewById(R.id.etAdminPassword); 

    btnAdminLogin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(etUsername.getText().toString().equals("administrator") && etPassword.getText().toString().equals("password")){ 
       Intent i = new Intent(AdminLogin.this, RegisterCandidate.class); 
       startActivity(i); 
      } 
     } 
    }); 

} 
} 

用户登陆代码:

public class UserLogin extends AppCompatActivity{ 

//TextView tvUserForgotPassword; 
TextView tvNewUserSignUp; 
//Button btnUserLogIn; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    tvNewUserSignUp = (TextView) findViewById(R.id.tvNewUserSignUp);   

    tvNewUserSignUp.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(UserLogin.this, NewUser.class); 
      startActivity(i); 
     } 
    }); 

} 
} 

RegisterCandidate代码:

public class RegisterCandidate extends AppCompatActivity{ 
@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 
} 

NEWUSER代码:

public class NewUser extends AppCompatActivity{ 
@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 
} 

UPDATE1:我已被建议在答案的所有更改,当我点击MainActivity中的“SKIP INSTRUCTIONS”按钮时,我的应用程序仍然崩溃。此外,当我点击AdminLogin Activity中的“登录”按钮时,应用程序崩溃。我该怎么办?

更新2:我指的是What is a NullPointerException, and how do I fix it?但还是无法修复这个错误!

+0

你增加你的活动清单? –

+0

@Palak Jain和你不能在java上使用'=='检查变量值,你必须使用'.equals'而不是'==' –

+0

是的,我有@SudheeshR –

回答

1

你没有setContentViewAdminLogin活动。

@Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // set contentview here before finding views otherwise they will be null 
    btnAdminLogin = (Button) findViewById(R.id.btnAdminLogin); 
    } 

只是一个说明,同样的问题是你的其他活动,交叉检查。

如果你想知道什么是setContentView,那么它在短期内关联View/UI,当Activity启动时将显示该UI。举个例子 - 如果你想在UI上显示EditTextButton,那么它们必须存在于扩展名为.xml的布局文件中。(您也可以创建通过java代码视图)

+0

什么是setContentView?其实我是一个新手 –

+0

在setContentView你必须传递你的活动layout_id。检查你写的MainActivity setContentView(R.layout.activity_main) – Rahul

+0

@PalakJain使用.equals比较字符串,而不是== – Rahul

1

你不能在你的后台管理活动与==比较字符串etUsername.getText().toString() == "administrator"

使用

etUsername.getText().toString().equals("administrator")

你也没有的setContentView如上回答说

0

没有后端和Android的前端语言。两者都使用Java完成。 XML文件只是活动的布局或框架。要使用活动必须使用

setContentView(R.id.layout_id)