我正在学习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) 申请已终止。
答案 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() {...}
。这样你甚至不需要初始化你的类(也使它静态,顺便说一句)。