【发布时间】:2014-05-08 14:08:32
【问题描述】:
我是 Java 和 Android 的新手,遇到了很多问题。我创建了一个名为 EmptyField.java 的 Java 类,该类有 2 个方法:Login Empty 和 Create Empty。 我有另一个名为 Loginactivity.java 的 java 文件。在 Loginactivity 我想调用 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 类时,应用程序崩溃。你能帮帮我吗?谢谢。
我的日志:
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";
}
}
}
【问题讨论】:
-
在修复代码之前,让我们从不同的角度分析问题..你想从另一个活动中调用一个活动吗?这是你的目标吗?
-
也许我的 EmptyField.java 不是一个活动。我只想创建一个执行某些任务的类,并且我想在我的应用程序中使用它的方法。相反,Loginactivity 是一个活动。我想从 LoginActivity 调用 EmptyField。很抱歉,我必须创建 Android 应用程序,但没有人教我 Java。所以我很新。
-
嗯,你试图调用另一个活动的方法......我从来没有尝试过我怀疑可以做到的 dat......除了那个 EmptyField 类有它自己的小部件而且它们没有属于 LoginActivity 类所以..这也可能是一个问题..post ur logcat
-
如果 EmptyField 不是一个活动,那么你扩展 Activity 类?有问题。不要在那里扩展活动并删除生命周期方法。单独编写成员、getter 和 setter。
-
正如您的代码所示,您的两个类都是活动。如果您不想将 EmptyField 用作 Activity,请不要扩展 Activity。此时您应该可以调用 EmptyField 的任何方法,但可能会出现其他问题,例如您不允许在未传递 Context 的情况下修改和 EditText 框超出活动范围。我建议您在进一步阅读之前阅读有关 Android 编程的正确且简单的指南。
标签: java android class methods