Java Logcat:NullPointerException

Java Logcat:NullPointerException,java,android,Java,Android,我正在制作一个应用程序,它可以向乐高NXT发送一些字节。我以前有一个应用程序使用相同的代码。当我运行它时,我会在日志中看到: 10-29 12:35:12.691: I/ENTRE(14494): ONCREATE 10-29 12:35:12.721: I/Excelente(14494): BT ACTIVADO 10-29 12:35:12.721: I/Excelente(14494): ENTRE A BT ACTIVAR 10-29 12:35:12.721: V/Bluetooth

我正在制作一个应用程序,它可以向乐高NXT发送一些字节。我以前有一个应用程序使用相同的代码。当我运行它时,我会在日志中看到:

10-29 12:35:12.691: I/ENTRE(14494): ONCREATE
10-29 12:35:12.721: I/Excelente(14494): BT ACTIVADO
10-29 12:35:12.721: I/Excelente(14494): ENTRE A BT ACTIVAR
10-29 12:35:12.721: V/BluetoothSocket.cpp(14494): initSocketNative
10-29 12:35:12.721: V/BluetoothSocket.cpp(14494): ...fd 40 created (RFCOMM, lm = 26)
10-29 12:35:12.721: V/BluetoothSocket.cpp(14494): initSocketFromFdNative
10-29 12:35:12.751: D/BluetoothUtils(14494): isSocketAllowedBySecurityPolicy start : device null
10-29 12:35:13.442: V/BluetoothSocket.cpp(14494): connectNative
10-29 12:35:14.153: V/BluetoothSocket.cpp(14494): ...connect(40, RFCOMM) = 0 (errno 115)
10-29 12:35:14.163: I/CONECTE(14494): CONEXION EXITOSA
10-29 12:35:14.163: I/Excelente(14494): CONEXION EXITOSA
10-29 12:35:14.163: I/Exelente(14494): ENTRE A MOTOR
10-29 12:35:14.163: I/Excelente(14494): ENTRE A WRITE
10-29 12:35:14.163: D/AndroidRuntime(14494): Shutting down VM
10-29 12:35:14.163: W/dalvikvm(14494): threadid=1: thread exiting with uncaught exception (group=0x4114e2a0)
10-29 12:35:14.163: E/AndroidRuntime(14494): FATAL EXCEPTION: main
10-29 12:35:14.163: E/AndroidRuntime(14494): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wordpress.sochidev.NXTControl/com.wordpress.sochidev.NXTControl.NXT}: java.lang.NullPointerException
10-29 12:35:14.163: E/AndroidRuntime(14494):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at android.app.ActivityThread.access$700(ActivityThread.java:134)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at android.os.Looper.loop(Looper.java:137)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at android.app.ActivityThread.main(ActivityThread.java:4867)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at java.lang.reflect.Method.invokeNative(Native Method)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at java.lang.reflect.Method.invoke(Method.java:511)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at dalvik.system.NativeStart.main(Native Method)
10-29 12:35:14.163: E/AndroidRuntime(14494): Caused by: java.lang.NullPointerException
10-29 12:35:14.163: E/AndroidRuntime(14494):    at com.wordpress.sochidev.NXTControl.BT_comm.writeMessage(BT_comm.java:96)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at com.wordpress.sochidev.NXTControl.Motor.motor(Motor.java:41)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at com.wordpress.sochidev.NXTControl.NXT.onCreate(NXT.java:27)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at android.app.Activity.performCreate(Activity.java:5047)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
10-29 12:35:14.163: E/AndroidRuntime(14494):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
10-29 12:35:14.163: E/AndroidRuntime(14494):    ... 11 more
10-29 12:40:22.040: I/Process(14494): Sending signal. PID: 14494 SIG: 9
主要活动:

package com.wordpress.sochidev.NXTControl;

import com.wordpress.sochidev.NXTControl.BT_comm;
import com.wordpress.sochidev.NXTControl.Motor;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;


public class NXT extends Activity {
    boolean connection = false;
    BT_comm BT = new BT_comm();
    Motor MT = new Motor();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nxt);
        Log.i("ENTRE", "ONCREATE");
        BT.enableBT(); 
        Log.i("Excelente", "BT ACTIVADO");
        BT.connectToNXTs();
        Log.i("Excelente", "CONEXION EXITOSA");
        MT.motor(2,(byte) 0x64, false, true, false);
        connection = true;  
    }

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

package com.wordpress.sochidev.NXTControl;

import android.util.Log;

public class Motor {
    BT_comm BT = new BT_comm();
    public void motor(int motor, byte power, boolean speedReg, boolean motorSync, boolean brake) {
        Log.i("Exelente","ENTRE A MOTOR");
        byte[] data = { (byte) 0x0c, (byte) 0x00, (byte) 0x80, (byte) 0x04, (byte) 0xFF, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 };


        switch (motor) {
        case 0:
            data[4] = (byte) 0xFF;  
        break;
        case 1:
            data[4] = (byte) 0x00;
        break;
        case 2:
            data[4] = (byte) 0x01;
        break;
        case 3:
            data[4] = (byte) 0x02;
        break;
        }

        data[5] = power;

        if (speedReg) {
            data[7] = 0x01;
        }
        if (motorSync) {
            data[7] = 0x02;
        }
        if (brake) {
            data [6] = 0x02;
        }


        try {
        BT.writeMessage (data);
        }
        catch (InterruptedException e) {
            // TODO Auto-generated catch block
            Log.i("FAILED","SEND DATA");
        }
    }
}
BT_通信类:

package com.wordpress.sochidev.NXTControl;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.UUID;
import com.wordpress.sochidev.NXTControl.NXT;
import com.wordpress.sochidev.NXTControl.Motor;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.util.Log;

 public class BT_comm {
    //Target NXTs for communication
     final String nxt1 = "00:16:53:15:4D:66";

     BluetoothAdapter localAdapter;
     BluetoothSocket socket_nxt1;
     boolean success=false;

     BluetoothSocket mmSocket;
     InputStream mmInStream;
     OutputStream mmOutStream;











//Enables Bluetooth if not enabled
public void enableBT(){
    localAdapter=BluetoothAdapter.getDefaultAdapter();
    //If Bluetooth not enable then do it
    if(localAdapter.isEnabled()==false){
        localAdapter.enable();
        while(!(localAdapter.isEnabled())){

        }
    }

}

//connect to both NXTs
public  boolean connectToNXTs(){



    //get the BluetoothDevice of the NXT
    BluetoothDevice nxt_1 = localAdapter.getRemoteDevice(nxt1);
    Log.i("Excelente", "ENTRE A BT ACTIVAR");

    //try to connect to the nxt
    try {
        socket_nxt1 = nxt_1.createRfcommSocketToServiceRecord(UUID
                .fromString("00001101-0000-1000-8000-00805F9B34FB"));
            socket_nxt1.connect();

        success = true;

    } catch (IOException e) {
        Log.i("Bluetooth","Err: Device not found or cannot connect");
        success=false;


    }
    if (success) {
         Log.i("CONECTE","CONEXION EXITOSA");
    }
    return success;

}






public void writeMessage(byte[] msg) throws InterruptedException{
    //BluetoothSocket connSock;
    Log.i("Excelente","ENTRE A WRITE");



      //  connSock=socket_nxt1;

        try {

           // OutputStreamWriter out =new OutputStreamWriter(connSock.getOutputStream());
          // mmOutStream.write(msg);
           // out.flush();
            OutputStream outputStream = socket_nxt1.getOutputStream();
            Log.i("Excelente","Asigne socket");
            outputStream.write(msg);
            Log.i("Excelente","COMANDO EXITOSO");

            Thread.sleep(100);


        } catch (IOException e) {
            // TODO Auto-generated catch block
            Log.i("PROBLEMA","ERROR DE DATOS");
        }
}


public byte [] readMessage(){
    byte[] buffer = new byte[64];
    Log.i("Excelente","Entre a readmessage");

        try {

            InputStream inputstream = socket_nxt1.getInputStream();         
            inputstream.read(buffer);
            //mmInStream.read(buffer);

            Log.i("Excelente","Lei los datos");

            for (int index = 0; index < buffer.length; index++){

                 Log.i("RECIBIDO:", String.format("0x%20x", buffer[index]));

            }

            Log.i("Excelente","Recibi datos y los escribi");

            return buffer;


        } catch (IOException e) {
            // TODO Auto-generated catch block
            Log.i("PROBLEMA","ERROR DE DATOS AL RECIBIR");
            return null;
        }


}



}
package com.wordpress.sochidev.NXTControl;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.io.OutputStream;
导入java.io.OutputStreamWriter;
导入java.util.UUID;
导入com.wordpress.sochidev.NXTControl.NXT;
导入com.wordpress.sochidev.NXTControl.Motor;
导入android.bluetooth.BluetoothAdapter;
导入android.bluetooth.bluetooth设备;
导入android.bluetooth.BluetoothSocket;
导入android.util.Log;
公共类BT_通信{
//用于通信的目标NXT
最终字符串nxt1=“00:16:53:15:4D:66”;
蓝牙适配器本地适配器;
蓝牙插座_nxt1;
布尔成功=假;
蓝牙插座;
输入流;
输出流mmOutStream;
//如果未启用,则启用蓝牙
public void enableBT(){
localAdapter=BluetoothAdapter.getDefaultAdapter();
//如果蓝牙未启用,则执行此操作
if(localAdapter.isEnabled()==false){
localAdapter.enable();
而(!(localAdapter.isEnabled()){
}
}
}
//连接到两个NXT
公共布尔值connectToNXTs(){
//获取NXT的蓝牙设备
BluetoothDevice nxt_1=localAdapter.getRemoteDevice(nxt1);
Log.i(“卓越”、“英国电信活动中心”);
//尝试连接到nxt
试一试{
socket_nxt1=nxt_1.createrFComSocketToServiceRecord(UUID
.fromString(“000011101-0000-1000-8000-00805F9B34FB”);
socket_nxt1.connect();
成功=真实;
}捕获(IOE异常){
Log.i(“蓝牙”,“错误:未找到设备或无法连接”);
成功=错误;
}
如果(成功){
Log.i(“连接”、“连接出口”);
}
回归成功;
}
public void writeMessage(字节[]msg)引发InterruptedException{
//蓝牙套;
Log.i(“Excelente”、“ENTRE A WRITE”);
//connSock=插座×nxt1;
试一试{
//OutputStreamWriter out=新的OutputStreamWriter(connSock.getOutputStream());
//mmOutStream.write(msg);
//out.flush();
OutputStream OutputStream=socket_nxt1.getOutputStream();
Log.i(“Excelente”、“Asigne socket”);
outputStream.write(msg);
Log.i(“卓越”、“COMANDO EXITOSO”);
睡眠(100);
}捕获(IOE异常){
//TODO自动生成的捕捉块
Log.i(“问题”、“数据错误”);
}
}
公共字节[]读取消息(){
字节[]缓冲区=新字节[64];
Log.i(“Excelente”,“Entre a readmessage”);
试一试{
InputStream InputStream=socket_nxt1.getInputStream();
inputstream.read(缓冲区);
//mmInStream.read(缓冲区);
Log.i(“卓越”、“利洛达托斯”);
for(int index=0;index
我猜这是因为我是android开发者的新手,所以我不知道这个错误意味着什么。有什么想法吗


谢谢。

最简单的方法是:在

//try to connect to the nxt
try {
    socket_nxt1 = nxt_1.createRfcommSocketToServiceRecord(UUID
            .fromString("00001101-0000-1000-8000-00805F9B34FB"));
        socket_nxt1.connect();
    success = true;

} catch (Exception e) {
    Log.i("Bluetooth","Err: Device not found or cannot connect");
    success=false;
}

在BT_comm.java处有些东西是空的:第96行我知道,socket_nxt1是空的,但它应该等于nxt_1.createrFComsockettoServiceRecord(UUID.fromString(“00001101-0000-1000-8000-00805F9B34FB”);socket_nxt1.connect();在connectToNXTs()上,为什么不
捕获该异常?