2014-09-01 3 views
0

Это недавний пост в моей недавней публикации, в котором я попытался вызвать метод из другого класса и ответить изменением TextView. Теперь я пытаюсь добавить для инициализации Bluetooth-адаптера на этот метод (BluetoothOn), однако я снова столкнулся с той же ошибкой, что приложение остановилось. С другой стороны, я могу запустить приложение без проблем, если объявить BLEadapter в методе Main.Почему я не могу инициализировать bluetooth по другому методу класса?

public class MainActivity extends Activity { 

    private BluetoothAdapter mBluetoothAdapter; 
    private static final int REQUEST_ENABLE_BT = 1; 

     private TextView textView; 
     //private View myView; 
     Button button; 

      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 

       textView =(TextView)findViewById(R.id.textView1); 
       addListenerOnButton(); 
      } 

      private void addListenerOnButton() { 
       button = (Button) findViewById(R.id.button1); 

       button.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View arg0) { 

         enableBluetooth(arg0); 
        } 

       }); 
      } 

      @Override 
      public boolean onCreateOptionsMenu(Menu menu) { 
       // Inflate the menu; this adds items to the action bar if it is present. 
       getMenuInflater().inflate(R.menu.main, menu); 
       return true; 
      } 

      @Override 
      public boolean onOptionsItemSelected(MenuItem item) { 
       // Handle action bar item clicks here. The action bar will 
       // automatically handle clicks on the Home/Up button, so long 
       // as you specify a parent activity in AndroidManifest.xml. 
       int id = item.getItemId(); 
       if (id == R.id.action_settings) { 
        return true; 
       } 
       return super.onOptionsItemSelected(item); 
      } 

      public void enableBluetooth (View view){  

      BluetoothOn ble = new BluetoothOn(); 
      ble.initializeBlue(textView); 



      }  
} 

В Мой класс Bluetooth

public class BluetoothOn extends MainActivity { 

     private TextView textView1; 

     private BluetoothAdapter mBluetoothAdapter; 
     private static final int REQUEST_ENABLE_BT = 1; 

     public void initializeBlue(View myView){ 

      String BleisOn = "Bluetooth enabled !!!!"; 

      textView1 = (TextView)myView.findViewById(R.id.textView1); 
      textView1.setText(BleisOn); 


      // Initializes Bluetooth adapter. 
      final BluetoothManager bluetoothManager = 
      (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); 
      mBluetoothAdapter = bluetoothManager.getAdapter(); 

      // Ensures Bluetooth is available on the device and it is enabled. If not, 
      // displays a dialog requesting user permission to enable Bluetooth. 
      if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) { 
      Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
      startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 
         } 
     } 

} 

Может кто-нибудь предоставить мне знания о том, как я могу вызывать методы моей основной деятельности, которая не будет вызывать приложение к сбою. Я просто начинающий, любезно объясняю, какие вещи мне нужно детально, я просто хочу создавать другие классы за пределами основного и вызывать методы, когда пользователь взаимодействует с Android-приложением. Я думаю, что я просто не передал значения другому классу должным образом, поэтому он не работает на андроиде ... Приложение сработает, как только я коснусь назначенной кнопки. Что мне нужно на этот код .. кстати вот ссылка на мой пост ранее, creating a separate class without a user interface пожалуйста, помогите спасибо хороших людей ...

Вот лог кошки

09-01 13:26:27.307: I/ActivityManager(19336): Timeline: Activity_idle id: [email protected] time:341763403 
09-01 13:26:39.627: D/AndroidRuntime(21289): Shutting down VM 
09-01 13:26:39.627: W/dalvikvm(21289): threadid=1: thread exiting with uncaught exception (group=0x4156cd88) 
09-01 13:26:39.627: E/AndroidRuntime(21289): FATAL EXCEPTION: main 
09-01 13:26:39.627: E/AndroidRuntime(21289): Process: com.example.thisapp, PID: 21289 
09-01 13:26:39.627: E/AndroidRuntime(21289): java.lang.IllegalStateException: System services not available to Activities before onCreate() 
09-01 13:26:39.627: E/AndroidRuntime(21289): at android.app.Activity.getSystemService(Activity.java:4532) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at com.example.thisapp.BluetoothOn.initializeBlue(BluetoothOn.java:27) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at com.example.thisapp.MainActivity.enableBluetooth(MainActivity.java:71) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at com.example.thisapp.MainActivity$1.onClick(MainActivity.java:43) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at android.view.View.performClick(View.java:4569) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at android.view.View$PerformClick.run(View.java:18553) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at android.os.Handler.handleCallback(Handler.java:733) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at android.os.Handler.dispatchMessage(Handler.java:95) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at android.os.Looper.loop(Looper.java:212) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at android.app.ActivityThread.main(ActivityThread.java:5151) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at java.lang.reflect.Method.invokeNative(Native Method) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at java.lang.reflect.Method.invoke(Method.java:515) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 
09-01 13:26:39.627: E/AndroidRuntime(21289): at dalvik.system.NativeStart.main(Native Method) 
09-01 13:26:41.487: I/Process(21289): Sending signal. PID: 21289 SIG: 9 
+1

Вы говорите, что приложение остановлено. Вывести вывод logcat. – eightx2

+0

Возможный дубликат [К сожалению, MyApp остановлен. Как я могу это решить?] (Http://stackoverflow.com/questions/23353173/unelcome-myapp-has-stopped-how-can-i-solve-this) –

+0

Угадайте: вы передаете 'TextView' для' initializeBlue() '. Этот метод пытается * найти * 'TextView' в' View' - поэтому 'textView1', вероятно,« null ». – eightx2

ответ

0

Есть целый несколько проблем с кодом:

  1. BluetoothOn не должны extends MainActivity.

  2. BluetoothOn не должен знать ни одного из компонентов пользовательского интерфейса. Передача View методу initializeBlue() - это плохое дизайнерское решение. См. this answer к вашему предыдущему вопросу о том, как отделить логику вашего логического устройства от логики Bluetooth.

+0

Привет, почему BluetoothOn не должен расширять MainActivity ... Не следует ли его объявлять, чтобы он мог наследовать методы и переменные Main? – Nms03

+0

@ Nms03 Нет. Если вам нужны методы из 'Activity', вам следует передать ссылку' Activity' на конструктор или методы 'BluetoothOn'. Попытка использовать эти методы через наследование является основным источником ваших проблем, потому что вы не соблюдаете жизненный цикл Деятельности. –

+0

@ Nms03 Я считаю, что вы пытаетесь отделить логику, которая не может быть отделена от вашей «MainActivity», потому что вам нужны методы из нее. Я предлагаю вам сначала получить эту работу в рамках «MainActivity».Вы можете позже посмотреть, что вы можете реорганизовать в отдельный класс. –

Смежные вопросы