我是Java和Android的新手,我遇到了很多问题。我创建一个Java类调用EmptyField.java,这个类有2个方法:Login Empty和Create Empty。 我有另一个名为Loginactivity.java的java文件。在Loginactivity中我想调用EmptyField的类,但我无法做到。这是我的代码。
Emptyfield.java
package com.example.prenotazione_esame;
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
public class EmptyField extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public String LoginEmpty(){
EditText login_text = (EditText) findViewById(R.id.UserName);
EditText password_text = (EditText) findViewById(R.id.Password);
if ((login_text.getText().toString().equals(""))|| (password_text.getText().toString().equals(""))){
return "Empty" ;
}
else{
return "Full";
}
}
public String CreateEmpty(){
EditText login_text = (EditText) findViewById(R.id.UserName);
EditText password_text = (EditText) findViewById(R.id.Password);
EditText conferma_text = (EditText) findViewById(R.id.Conferma);
if ((login_text.getText().toString().equals(""))|| (password_text.getText().toString().equals("")) || (conferma_text.getText().toString().equals(""))){
return "Empty" ;
}
else{
return "Full";
}
}
}
这是Loginactivity.java:
package com.example.prenotazione_esame;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.view.View.OnClickListener;
public class LoginActivity extends Activity {
private LoginDataBase dbLogin;
EmptyField emptyf = new EmptyField();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Button button_crea = (Button) findViewById(R.id.Create);
button_crea.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
openCreateAccount();
}
});
dbLogin = new LoginDataBase(this);
Button button_login = (Button) findViewById(R.id.Login);
button_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
executeLogin();
}
});
}
private void openCreateAccount(){
Intent intent_crea = new Intent(this, CreateAccountActivity.class);
startActivity(intent_crea);
}
private void executeLogin(){
//EmptyField emptyf = new EmptyField();
String a=emptyf.LoginEmpty();
Toast toast = Toast.makeText(this,a, Toast.LENGTH_SHORT);
toast.show();
}
}
我在模拟器上启动我的应用程序,当它尝试调用EmptyField类时,应用程序崩溃。你能帮我吗?谢谢。
我的logcat:
05-08 09:24:49.070: E/AndroidRuntime(1162): FATAL EXCEPTION: main
05-08 09:24:49.070: E/AndroidRuntime(1162): Process: com.example.prenotazione_esame, PID: 1162
05-08 09:24:49.070: E/AndroidRuntime(1162): java.lang.NullPointerException
05-08 09:24:49.070: E/AndroidRuntime(1162): at com.example.prenotazione_esame.LoginActivity.executeLogin(LoginActivity.java:55)
05-08 09:24:49.070: E/AndroidRuntime(1162): at com.example.prenotazione_esame.LoginActivity.access$1(LoginActivity.java:44)
05-08 09:24:49.070: E/AndroidRuntime(1162): at com.example.prenotazione_esame.LoginActivity$2.onClick(LoginActivity.java:34)
05-08 09:24:49.070: E/AndroidRuntime(1162): at android.view.View.performClick(View.java:4438)
05-08 09:24:49.070: E/AndroidRuntime(1162): at android.view.View$PerformClick.run(View.java:18422)
05-08 09:24:49.070: E/AndroidRuntime(1162): at android.os.Handler.handleCallback(Handler.java:733)
05-08 09:24:49.070: E/AndroidRuntime(1162): at android.os.Handler.dispatchMessage(Handler.java:95)
05-08 09:24:49.070: E/AndroidRuntime(1162): at android.os.Looper.loop(Looper.java:136)
05-08 09:24:49.070: E/AndroidRuntime(1162): at android.app.ActivityThread.main(ActivityThread.java:5017)
05-08 09:24:49.070: E/AndroidRuntime(1162): at java.lang.reflect.Method.invokeNative(Native Method)
05-08 09:24:49.070: E/AndroidRuntime(1162): at java.lang.reflect.Method.invoke(Method.java:515)
05-08 09:24:49.070: E/AndroidRuntime(1162): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-08 09:24:49.070: E/AndroidRuntime(1162): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-08 09:24:49.070: E/AndroidRuntime(1162): at dalvik.system.NativeStart.main(Native Method)
这里是我的empyfield.java。现在它运行了。谢谢。
package com.example.prenotazione_esame;
import android.widget.EditText;
public class EmptyField{
public String LoginEmpty(EditText x, EditText y){
if ((x.getText().toString().equals(""))|| (y.getText().toString().equals(""))){
return "Empty" ;
}
else{
return "Full";
}
}
public String CreateEmpty(EditText x, EditText y, EditText z){
if ((x.getText().toString().equals(""))|| (y.getText().toString().equals("")) || (z.getText().toString().equals(""))){
return "Empty" ;
}
else{
return "Full";
}
}
}
答案 0 :(得分:0)
您的方法被声明为私有。你试过公开吗?
private void executeLogin(){
尝试将其更改为。
public void executeLogin(){
答案 1 :(得分:0)
因此,如果要显示另一个包含登录名和密码字段的屏幕,则需要使用startActivityForResult()方法:
http://developer.android.com/training/basics/intents/result.html
在这种情况下,在EmptyField.onCreate()方法中你需要setContent(或者你没有View使用findViewById()方法)。
另一种方式意味着EmptyField只是帮助类。所以没有理由扩展Activity类。但在这种情况下,您必须将主视图发送到LoginEmpty()方法,并为此视图调用findViewById。
答案 2 :(得分:0)
如果你想访问那些组件可能会将那些组件传递给bundle不确定,那么调用findViewById()
将需要setContentView()
在该活动中,每个活动都有自己的生命周期。
但在你的情况下,我只是创建一个简单的类,并传递那些你不需要扩展Activity的组件。