2017-01-30 32 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

相關問題