2017-01-30 1 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の基本を学んでください。

短い: アクティビティは新しいアクティビティ()でインスタンス化されません。 あなたがしようとしている場合は、インテントを使用してください。

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

これは別のアクティビティを開く方法です。

本当にクラスをインスタンス化したいのであれば、generateTextクラスからその拡張を削除し、普通の普通のクラスのように扱うだけです。

また、いくつかのJavaコード標準をチェックする必要があります。 小文字の最初の文字でクラスを作成しないでください。

幸運のベスト。

+0

ご回答いただきありがとうございます。あなたが提案したように、私はJavaの基本に戻る必要があると思ってください:) – Dan

0

1)あなたはUIを使用している場合は、活動でそれを行うあなたが現在いる

2)あなたが別のアクティビティ、使用を開始する場合:。

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

3)別のクラスのメソッドを実行する場合は、そのクラスのメソッド

public static <return-type> method() {...}とします。このようにして、クラスを初期化する必要もなくなります(静的にもbtwでも)。

+0

あなたの返事を感謝します、ありがとう! – Dan

関連する問題