2017-01-30 101 views
-1

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

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: FATAL EXCEPTION: main Process: com.example.daniel.hamblaster, PID: 5560 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.daniel.hamblaster/com.example.daniel.hamblaster.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference at android.support.v7.app.AppCompatDelegateImplBase.(AppCompatDelegateImplBase.java:120) at android.support.v7.app.AppCompatDelegateImplV9.(AppCompatDelegateImplV9.java:151) at android.support.v7.app.AppCompatDelegateImplV11.(AppCompatDelegateImplV11.java:31) at android.support.v7.app.AppCompatDelegateImplV14.(AppCompatDelegateImplV14.java:55) at android.support.v7.app.AppCompatDelegateImplV23.(AppCompatDelegateImplV23.java:33) at android.support.v7.app.AppCompatDelegateImplN.(AppCompatDelegateImplN.java:33) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:201) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185) at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:525) at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:193) at com.example.daniel.hamblaster.generateText.(generateText.java:9) at com.example.daniel.hamblaster.MainActivity.onCreate(MainActivity.java:14) at android.app.Activity.performCreate(Activity.java:6679) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)  at android.app.ActivityThread.-wrap12(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6119)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)  Application terminated.

回答

1

你试图让不可能的东西。

活动不能被创建为普通类。 我可以看到你已经开始掌握Java是什么了。在运行到Android之前,花点时间学习Java基础知识。

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

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

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

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

您还应该检查一些Java代码标准:) 请勿使用小写首字母创建类。

祝你好运。

+0

感谢您的回复,非常感谢。想想我需要回到Java基础知识,因为你已经建议:) – Dan

0

1)如果您正在使用的用户界面的工作,做到在活动中您目前在

2)如果要启动另一个活动,使用:

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

3)如果你想执行另一个类的方法,让它在该类中是

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

+0

感谢您的回复,谢谢! – Dan

相关问题