如何在另一个类中调用Java类

时间:2014-05-08 14:08:32

标签: java android class methods

我是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";
        }
    }
}

3 个答案:

答案 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的组件。