2017-01-30 6 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. Не спешите и изучайте основы Java, прежде чем запускать Android.

Для краткости: Деятельность не требуется при создании новой активности(); Если вы пытаетесь, пожалуйста, используйте намерения.

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() {...} в этом классе. Таким образом, вам даже не нужно инициализировать ваш класс (сделайте его статическим тоже, кстати).

+0

Цените свой ответ, спасибо! – Dan