2017-07-16 89 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)