2013-11-13 5 views
1

Итак, я следовал этому руководству How to receive serial data using android bluetooth Я сделал это именно то, что было сказано. Но почему-то приложение разбилось после нажатия любой кнопки. Мои вопросы:Ошибка приложения после нажатия кнопки (logcat include)

1) почему это произошло? Я имею в виду, если приложение работает хорошо в прошлом ADT, почему это не было в недавнем ADT? в чем причина этого? потому что я нашел, что у кого-то тоже есть аналогичная проблема из источника кода http://bellcode.wordpress.com/2012/01/02/android-and-arduino-bluetooth-communication/

2) как я могу это исправить? Я считаю, что код уже хорошо структурирован, сначала инициализируется кнопка, а затем устанавливается onclicklistener

3) может кто-нибудь сказать, что он должен понимать в этом журнале? Я новичок в Android программирования здесь я включить LogCat Крушения отчета

11-13 09:26:44.711 E/AndroidRuntime(14902): FATAL EXCEPTION: main 
11-13 09:26:44.711 E/AndroidRuntime(14902): java.lang.NullPointerException 
11-13 09:26:44.711 E/AndroidRuntime(14902):  at com.example.androidarduinopackage.MainActivity.closeBT(MainActivity.java:207) 
11-13 09:26:44.711 E/AndroidRuntime(14902):  at com.example.androidarduinopackage.MainActivity$3.onClick(MainActivity.java:90) 
11-13 09:26:44.711 E/AndroidRuntime(14902):  at android.view.View.performClick(View.java:3517) 
11-13 09:26:44.711 E/AndroidRuntime(14902):  at android.view.View$PerformClick.run(View.java:14155) 
11-13 09:26:44.711 E/AndroidRuntime(14902):  at android.os.Handler.handleCallback(Handler.java:605) 
11-13 09:26:44.711 E/AndroidRuntime(14902):  at android.os.Handler.dispatchMessage(Handler.java:92) 
11-13 09:26:44.711 E/AndroidRuntime(14902):  at android.os.Looper.loop(Looper.java:154) 
11-13 09:26:44.711 E/AndroidRuntime(14902):  at android.app.ActivityThread.main(ActivityThread.java:4624) 
11-13 09:26:44.711 E/AndroidRuntime(14902):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-13 09:26:44.711 E/AndroidRuntime(14902):  at java.lang.reflect.Method.invoke(Method.java:511) 
11-13 09:26:44.711 E/AndroidRuntime(14902):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 
11-13 09:26:44.711 E/AndroidRuntime(14902):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 
11-13 09:26:44.711 E/AndroidRuntime(14902):  at dalvik.system.NativeStart.main(Native Method) 

Код:

package Android.Arduino.Bluetooth; 
import android.app.Activity; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothSocket; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.EditText; 
import android.widget.Button; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.Set; 
import java.util.UUID; 

public class MainActivity extends Activity 
{ 
TextView myLabel; 
EditText myTextbox; 
BluetoothAdapter mBluetoothAdapter; 
BluetoothSocket mmSocket; 
BluetoothDevice mmDevice; 
OutputStream mmOutputStream; 
InputStream mmInputStream; 
Thread workerThread; 
byte[] readBuffer; 
int readBufferPosition; 
int counter; 
volatile boolean stopWorker; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button openButton = (Button)findViewById(R.id.open); 
    Button sendButton = (Button)findViewById(R.id.send); 
    Button closeButton = (Button)findViewById(R.id.close); 
    myLabel = (TextView)findViewById(R.id.label); 
    myTextbox = (EditText)findViewById(R.id.entry); 

    //Open Button 
    openButton.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      try 
      { 
       findBT(); 
       openBT(); 
      } 
      catch (IOException ex) { } 
     } 
    }); 

    //Send Button 
    sendButton.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      try 
      { 
       sendData(); 
      } 
      catch (IOException ex) { } 
     } 
    }); 

    //Close button 
    closeButton.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      try 
      { 
       closeBT(); 
      } 
      catch (IOException ex) { } 
     } 
    }); 
} 

void findBT() 
{ 
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
    if(mBluetoothAdapter == null) 
    { 
     myLabel.setText("No bluetooth adapter available"); 
    } 

    if(!mBluetoothAdapter.isEnabled()) 
    { 
     Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
     startActivityForResult(enableBluetooth, 0); 
    } 

    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); 
    if(pairedDevices.size() > 0) 
    { 
     for(BluetoothDevice device : pairedDevices) 
     { 
      if(device.getName().equals("MattsBlueTooth")) 
      { 
       mmDevice = device; 
       break; 
      } 
     } 
    } 
    myLabel.setText("Bluetooth Device Found"); 
} 

void openBT() throws IOException 
{ 
    UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); //Standard SerialPortService ID 
    mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);   
    mmSocket.connect(); 
    mmOutputStream = mmSocket.getOutputStream(); 
    mmInputStream = mmSocket.getInputStream(); 

    beginListenForData(); 

    myLabel.setText("Bluetooth Opened"); 
} 

void beginListenForData() 
{ 
    final Handler handler = new Handler(); 
    final byte delimiter = 10; //This is the ASCII code for a newline character 

    stopWorker = false; 
    readBufferPosition = 0; 
    readBuffer = new byte[1024]; 
    workerThread = new Thread(new Runnable() 
    { 
     public void run() 
     {     
      while(!Thread.currentThread().isInterrupted() && !stopWorker) 
      { 
       try 
       { 
        int bytesAvailable = mmInputStream.available();       
        if(bytesAvailable > 0) 
        { 
         byte[] packetBytes = new byte[bytesAvailable]; 
         mmInputStream.read(packetBytes); 
         for(int i=0;i<bytesAvailable;i++) 
         { 
          byte b = packetBytes[i]; 
          if(b == delimiter) 
          { 
    byte[] encodedBytes = new byte[readBufferPosition]; 
    System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length); 
    final String data = new String(encodedBytes, "US-ASCII"); 
    readBufferPosition = 0; 

           handler.post(new Runnable() 
           { 
            public void run() 
            { 
             myLabel.setText(data); 
            } 
           }); 
          } 
          else 
          { 
           readBuffer[readBufferPosition++] = b; 
          } 
         } 
        } 
       } 
       catch (IOException ex) 
       { 
        stopWorker = true; 
       } 
      } 
     } 
    }); 

    workerThread.start(); 
} 

void sendData() throws IOException 
{ 
    String msg = myTextbox.getText().toString(); 
    msg += "\n"; 
    mmOutputStream.write(msg.getBytes()); 
    myLabel.setText("Data Sent"); 
} 

void closeBT() throws IOException 
{ 
    stopWorker = true; 
    mmOutputStream.close(); 
    mmInputStream.close(); 
    mmSocket.close(); 
    myLabel.setText("Bluetooth Closed"); 
} 
} 
+0

Просьба включить соответствующий код. Вы получили NPE на линии 207, которая была прослежена до линии 90. – Razgriz

+0

, пожалуйста, проверьте обновление, спасибо –

+0

Какая линия 207? – Szymon

ответ

1

Один или несколько из них этих объектов внутри метода closeBT равна нулю: mOutputStream, mmInputStream , mmSocket. Вы должны убедиться, что эти объекты не равны нулю. Если mmSocket имеет значение null, вы должны проверить, почему этот объект не является inicialized. Может быть, что-то связанное с адаптером bluetooth или кодом, который вы используете, несовместимо с версией Android.

+0

как это сделать? поскольку устройство и андроид еще не спарены. мы можем передать объект для работы с нулевым условием? есть ли у вас какие-либо ссылки, похожие на этот случай? –

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