Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android USB到串行接收错误_Java_Android_Multithreading_Serial Port_Usb - Fatal编程技术网

Java Android USB到串行接收错误

Java Android USB到串行接收错误,java,android,multithreading,serial-port,usb,Java,Android,Multithreading,Serial Port,Usb,我目前正致力于在Android上编写一个与Arduino板接口的应用程序。我能够向我的Arduino发送串行数据,但在我开始尝试接收数据时,我的应用程序在启动时崩溃 我现在已经设置了一个文本字段,从用户那里获取数据,并发送给Arduino,Arduino执行一个函数 对于我的接收,我在启动时制作了一个新线程,以不断监听来自Arduino的数据。每当执行此线程中的代码时,它就会崩溃 我使用此库作为我的基础: 以下是所有与此应用程序提供的其他功能相关的、省略的未读代码: import java.io

我目前正致力于在Android上编写一个与Arduino板接口的应用程序。我能够向我的Arduino发送串行数据,但在我开始尝试接收数据时,我的应用程序在启动时崩溃

我现在已经设置了一个文本字段,从用户那里获取数据,并发送给Arduino,Arduino执行一个函数

对于我的接收,我在启动时制作了一个新线程,以不断监听来自Arduino的数据。每当执行此线程中的代码时,它就会崩溃

我使用此库作为我的基础:

以下是所有与此应用程序提供的其他功能相关的、省略的未读代码:

import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;



import com.hoho.android.usbserial.driver.UsbSerialDriver;


import android.hardware.usb.UsbManager;
import android.content.Intent;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.content.Context;
import android.util.Log;
import com.hoho.android.usbserial.driver.UsbSerialProber;




     public class MainActivity extends Activity implements SensorEventListener, LocationListener{

private EditText sendTextField;
    TextView uartRX;

 public Handler Handler; 


UsbManager manager;



/** Called to create application activity*/
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    uartRX = (TextView)findViewById(R.id.rxUART);

    sendTextField = (EditText) findViewById(R.id.sendTextField);






    Handler = new Handler() { 
        @Override public void handleMessage(Message msg) { 
        String text = (String)msg.obj; 
        uartRX.append(text); 




        } 
        };


        Thread t = new Thread(new Runnable() {
             public void run()
             {
                 Message msg = new Message(); 
                    msg.obj = "Start Serial Listen\n"; 
                    Handler.sendMessage(msg);
                 rxUART();
             }

            public void rxUART()
            {

                manager = (UsbManager) getSystemService(Context.USB_SERVICE);
                UsbSerialDriver rxDriver = UsbSerialProber.acquire(manager);
                if (rxDriver != null) {
                      try {
                          rxDriver.open();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                }


                int byteSize = 0;
                String data = "";
                while(true)
                {
                byte[] arr = null;
                try {
                    rxDriver.setBaudRate(115200);
                    rxDriver.read(arr, byteSize);
                    data = new String(arr);
                    Message msg = new Message(); 
                    msg.obj = data; 
                    Handler.sendMessage(msg);

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                }
            }

    });
    t.start();

    }


public void sendUART(String data)
{
    manager = (UsbManager) getSystemService(Context.USB_SERVICE);
    // Find the first available driver.
    UsbSerialDriver driver = UsbSerialProber.acquire(manager);
    if (driver != null) {
          try {
            driver.open();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
          try {
            driver.setBaudRate(115200);

            byte buffer[] = new byte[16];
            int numBytesRead = driver.read(buffer, 1000);
            Log.d(TAG, "Read " + numBytesRead + " bytes.");


            byte temp[] = data.getBytes();

            driver.write(temp, 16);

          } catch (IOException e) {
            // Deal with error.
          } finally {
            try {
                driver.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block

                e.printStackTrace();
            }
          } 
        }



}
   public void onClickSendBtn(View v)
    {
       String data = "";
       data = sendTextField.getText().toString();
       sendUART(data);
       sendTextField.setText(" ");
    } 

@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;
}







  }
有人能帮我找出为什么应用程序在线程中创建的代码上崩溃吗

注意:当不在线程中时,代码也会崩溃。代码最初是sendUART()调用的一个函数,用于检查响应。也不是

日志:

   11-02 09:49:22.988: E/AndroidRuntime(22652): FATAL EXCEPTION: Thread-964
   11-02 09:49:22.988: E/AndroidRuntime(22652): java.lang.NullPointerException
   11-02 09:49:22.988: E/AndroidRuntime(22652):     at       com.example.sensortest.MainActivity$2.rxUART(MainActivity.java:143)
   11-02 09:49:22.988: E/AndroidRuntime(22652):     at com.example.sensortest.MainActivity$2.run(MainActivity.java:119)
   11-02 09:49:22.988: E/AndroidRuntime(22652):     at java.lang.Thread.run(Thread.java:856)
引用的行号为:

           Thread t = new Thread(new Runnable() {
             public void run()
             {
                 Message msg = new Message(); 
                    msg.obj = "Start Serial Listen\n"; 
                    Handler.sendMessage(msg);
                 rxUART();
             }

            public void rxUART()
            {

                manager = (UsbManager) getSystemService(Context.USB_SERVICE);
                UsbSerialDriver rxDriver = UsbSerialProber.acquire(manager);
                if (rxDriver != null) {
                      try {
                          rxDriver.open();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                }


                int byteSize = 0;
                String data = "";
                while(true)
                {
                byte[] arr = null;
                try {
                    rxDriver.setBaudRate(115200);
                    rxDriver.read(arr, byteSize);
                    data = new String(arr);
                    Message msg = new Message(); 
                    msg.obj = data; 
                    Handler.sendMessage(msg);

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                }
            }

    });
    t.start();

rxUart()
中,您无法正确处理案例
rxDriver==null


if()
语句仅跳过
open()
调用,但执行
while()
循环时
rxDriver
NULL
,导致NPE。顺便说一句,`sendUART()中也有同样的问题。

logcat的输出将很有帮助。@TurboJ我添加了logcat。谢谢@TurboJ你的建议,让我尝试了其他方法,效果很好。我将更新上面的代码。