2017-03-30 9 views
-2

HOw Android Studioで呼び出すメソッドとは異なるクラスでメソッドを使用しますか?私は、次の主要なクラスがあります。 Android Studioで別のクラスを使用する

package com.example.bluebus; 


import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 

import java.util.concurrent.Executors; 
import java.util.concurrent.ScheduledExecutorService; 
import java.util.concurrent.ScheduledFuture; 

import static java.util.concurrent.TimeUnit.SECONDS; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     BeeperControl test = new BeeperControl(); 
     //test.test(); 
     //test.test();*/ 

    } 
} 

と同じフォルダに

私は、次のBeeperControlクラスがあります。

あるように書か
import java.util.concurrent.ScheduledFuture; 

import static java.util.concurrent.TimeUnit.SECONDS; 

/** 
* Created by Arthur on 1/7/2017. 
*/ 

public class BeeperControl extends AppCompatActivity { 
     /*private final ScheduledExecutorService scheduler = 
       Executors.newScheduledThreadPool(1);*/ 
     final TextView text = (TextView) findViewById(R.id.text); 
    /* 
     public void beepForAnHour() { 
      final Runnable beeper = new Runnable() { 
       public void run() { 
        text.setText("Hello!"); 
       } 
      }; 
      final ScheduledFuture<?> beeperHandle = 
        scheduler.scheduleAtFixedRate(beeper, 0, 1, SECONDS); 
      scheduler.schedule(new Runnable() { 
       public void run() { beeperHandle.cancel(true); } 
      }, 60 * 60, SECONDS); 
     }*/ 
     public void test(){ 
      text.setText("Who are you?"); 
     } 
} 

、アプリが正常に動作します。しかし、私がtest.test()のコメントを外すと、エミュレータで実行しようとするとアプリケーションが閉じたままになります。私が見てきたことから、マニフェストの更新には問題があるかもしれませんが、修正方法はわかりません。どんな助けもありがとう!

+1

これで何を達成しようとしていますか?なぜ 'BeeperControl'の' onCreate'の外側で 'findViewById(R.id.text);を呼び出すのですか? (これはあなたに 'NullPointerExeption' BTW) –

+0

ボトムラインを与えます、あなたはアクティビティをインスタンス化するために' new'を使うことは決してありません。 LocalBroadcast、EventBusなどを使用する必要があります。リンクされた複製の両方を見てください。 –

答えて

0

クラス内のメソッドに値が返されていると、findbyidは範囲外であるためnullを返します。例えば

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 

import java.util.concurrent.Executors; 
import java.util.concurrent.ScheduledExecutorService; 
import java.util.concurrent.ScheduledFuture; 

import static java.util.concurrent.TimeUnit.SECONDS; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     BeeperControl test = new BeeperControl(); 
     TextView text = (TextView) findViewById(R.id.text); 
     text.setText(test.test()); 
     //test.test();*/ 

    } 
} 

あなたのクラス:あなたはを参照してテキストを渡す場合

import java.util.concurrent.ScheduledFuture; 

import static java.util.concurrent.TimeUnit.SECONDS; 

/** 
* Created by Arthur on 1/7/2017. 
*/ 

public class BeeperControl extends AppCompatActivity { 
     /*private final ScheduledExecutorService scheduler = 
       Executors.newScheduledThreadPool(1);*/ 
     /* final TextView text = (TextView) findViewById(R.id.text);^/ 
    /* 
     public void beepForAnHour() { 
      final Runnable beeper = new Runnable() { 
       public void run() { 
        text.setText("Hello!"); 
       } 
      }; 
      final ScheduledFuture<?> beeperHandle = 
        scheduler.scheduleAtFixedRate(beeper, 0, 1, SECONDS); 
      scheduler.schedule(new Runnable() { 
       public void run() { beeperHandle.cancel(true); } 
      }, 60 * 60, SECONDS); 
     }*/ 
     public string test(){ 
      return ("Who are you?"); 
     } 
} 

これはおそらく、それが使用されているものは何でもコンテキストでクラスの使用を支援しません。あなたのためにそれを行うかもしれないtest()。 R/ プレスコット...

+0

私はそれが実際にエラーではないと思う。はい、オブジェクトは最終ですが、OPは最終オブジェクトを変更しないテキストを変更するメソッドを使用しています。 –

+0

あなたは正しいでしょう、私は私の答えを改訂しました。 @ Atef Haresが指摘しているように、findbyidはヌルポインタを返します。 –

+0

はい、BeeperControlにはレイアウトがないため、MainControlではレイアウトがsetContentView()メソッドで指定されているため、NullPointerExceptionが発生します。しかし、あなたのコードにはまだ何か間違っています。 'text = test.test()'の行を 'text.setText(test.test())'に変更します。 text変数はTextViewで、test()メソッドはStringを返します。型はまったく異なり、別の例外が発生します。 :) –

関連する問題