如何在Android Studio的活动类中调用类(这不是活动)?

时间:2017-01-30 20:35:41

标签: java android class android-activity

我正在学习Android Studio,我决定创建一个Java类,然后在MainActivity中调用它。但是,应用程序在启动时崩溃 - 见下文。我只是不明白错误的含义。有什么想法吗?

MainActivity.java

   package com.example.daniel.hamblaster;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        generateText obj = new generateText();
        obj.generate();

    }
}

Java类:

package com.example.daniel.hamblaster;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class generateText extends AppCompatActivity {

    Button myButton = (Button) findViewById(R.id.myButton);

    public void generate() {
        myButton.setOnClickListener(
            new Button.OnClickListener() {
                public void onClick(View v) {
                    TextView myText = (TextView) findViewById(R.id.myText);
                    myText.setText("blablaba");
                }
            }
        );
    }
}

错误:

  

E / AndroidRuntime:致命异常:主要                     过程:com.example.daniel.hamblaster,PID:5560                     java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.daniel.hamblaster / com.example.daniel.hamblaster.MainActivity}:   java.lang.NullPointerException:尝试调用虚方法   'android.view.Window $ Callback android.view.Window.getCallback()'上   null对象引用                         在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)                         在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)                         在android.app.ActivityThread.-wrap12(ActivityThread.java)                         在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477)                         在android.os.Handler.dispatchMessage(Handler.java:102)                         在android.os.Looper.loop(Looper.java:154)                         在android.app.ActivityThread.main(ActivityThread.java:6119)                         at java.lang.reflect.Method.invoke(Native Method)                         在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886)                         在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)                      引起:java.lang.NullPointerException:尝试调用虚方法'android.view.Window $ Callback   在null对象引用上的android.view.Window.getCallback()'                         在android.support.v7.app.AppCompatDelegateImplBase。(AppCompatDelegateImplBase.java:120)                         在android.support.v7.app.AppCompatDelegateImplV9。(AppCompatDelegateImplV9.java:151)                         在android.support.v7.app.AppCompatDelegateImplV11。(AppCompatDelegateImplV11.java:31)                         在android.support.v7.app.AppCompatDelegateImplV14。(AppCompatDelegateImplV14.java:55)                         在android.support.v7.app.AppCompatDelegateImplV23。(AppCompatDelegateImplV23.java:33)                         在android.support.v7.app.AppCompatDelegateImplN。(AppCompatDelegateImplN.java:33)                         在android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:201)                         在android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)                         在android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:525)                         在android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:193)                         在com.example.daniel.hamblaster.generateText。(generateText.java:9)                         在com.example.daniel.hamblaster.MainActivity.onCreate(MainActivity.java:14)                         在android.app.Activity.performCreate(Activity.java:6679)                         在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)                         在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)                         在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)                         在android.app.ActivityThread.-wrap12(ActivityThread.java)                         在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477)                         在android.os.Handler.dispatchMessage(Handler.java:102)                         在android.os.Looper.loop(Looper.java:154)                         在android.app.ActivityThread.main(ActivityThread.java:6119)                         at java.lang.reflect.Method.invoke(Native Method)                         在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886)                         在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)   申请已终止。

2 个答案:

答案 0 :(得分:1)

你正在努力做出不可能的事情。

不要将活动创建为普通类。 我可以看到你开始掌握Java的含义。在开始使用Android之前,请花些时间学习Java基础知识。

简而言之: 活动不能用新的Activity()实例化; 如果您正在尝试,请使用Intents。

Intent a = new Intent(this, ActivityB.class);
this.startActivity(a);

这是从另一个开放活动的方式。

如果您真的想要实例化一个类,请从generateText类中删除该扩展,并像处理普通类一样处理它。

你也应该检查一些Java代码标准:) 永远不要创建一个小写首字母的类。

祝你好运。

答案 1 :(得分:0)

1)如果您正在使用UI,请在您当前所在的活动中进行。

2)如果您想开始其他活动,请使用:

Intent intent = new Intent(ActivityA.this, ActivityB.class); startActivity(intent);

3)如果你想执行另一个类的方法,那就让它成为

该班级中的

public static <return-type> method() {...}。这样你甚至不需要初始化你的类(也使它静态,顺便说一句)。