【问题标题】:How to call Java class in another class如何在另一个类中调用 Java 类
【发布时间】: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


【解决方案1】:

您的方法被声明为私有的。你试过公开吗?

private void executeLogin(){

尝试将其更改为。

public void executeLogin(){

【讨论】:

    【解决方案2】:

    所以,如果你想显示另一个带有登录和密码字段的屏幕,你需要使用 startActivityForResult() 方法:

    http://developer.android.com/training/basics/intents/result.html

    在这种情况下,在 EmptyField.onCreate() 方法中,您需要设置内容(或者您没有 View 才能使用 findViewById() 方法)。

    另一种方式意味着 EmptyField 只是辅助类。所以没有理由扩展 Activity 类。但在这种情况下,您必须将主视图发送到 LoginEmpty() 方法,并为此视图调用 findViewById。

    【讨论】:

      【解决方案3】:

      EmptyField 将无法调用 findViewById() 将需要在该活动中 setContentView() 如果您想访问这些组件,则每个活动都有自己的生命周期,可能不确定是否将这些组件传递到捆绑包中。 但在你的情况下,我只会创建一个简单的类并传递那些你不需要扩展 Activity 的组件。

      【讨论】:

        猜你喜欢
        • 2015-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-03
        • 2020-07-24
        • 1970-01-01
        相关资源
        最近更新 更多