Crazybired 2019-07-02 09:19 采纳率: 0%
浏览 622

int com_fd = newPort.openPort(uart, 0, (char) longUart);这段代码错在哪里?

package com.example.newland.serialport;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.newland.jni.Convert;
import com.newland.jni.SerialPort;//串口类
import com.newland.jni.OnDataReceivedListener;//数据接收监听口
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private String strReceiveData="";//串口接收的数据
private Spinner spBaudRate,spUart;
private EditText etAck,etSend;
private TextView tvUartStatus;
private CheckBox chkSendHex,chkAckHex;
SerialPort newPort=new SerialPort();//定义一个串口
private int[] sectCom={0,1,2,3};

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


    initComponent();//初始化控件
    initSpinnerBaudRate();//初始化下拉框的值

    //PC机发送数据是不定时的,故采用响应模式来接收数据

    newPort.setCommReceivedMode(true);//设置串口通讯为响应模式

    //设置数据接收的监听器
    newPort.setOnDataReceivedListener(new OnDataReceivedListener() {
        public void onDataReceived(String data) {
            handleReceivedData(data);//处理接受的数据
        }
    });
}


/****************************************
 * 函数名称:initComponent
 * 功能描述:初始化界面
 * 参数及返回值说明:  *
 ****************************************/
private void initComponent(){
    //初始化控件
    tvUartStatus=(TextView)findViewById(R.id.tvUartStatus);
    etAck=(EditText) findViewById(R.id.etAck);
    etSend=(EditText)findViewById(R.id.etSend);
    spBaudRate=(Spinner)findViewById(R.id.spBaudRate);
    spUart=(Spinner)findViewById(R.id.spUart);
    chkSendHex=(CheckBox)findViewById(R.id.chkSendHex);
    chkAckHex=(CheckBox)findViewById(R.id.chkAckHex);
    chkSendHex.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            String str=etSend.getText().toString();
            try {
                if (isChecked) {
                    etSend.setText(Convert.stringToHexString(str));
                } else {
                    etSend.setText(Convert.hexStringToString(str));
                }
            }catch (Exception e){

            }

        }
    });
    //增加事件监听,实现字符串与十六进制互转
    chkAckHex.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            String str=etAck.getText().toString();
            try {
                if (isChecked) {
                    etAck.setText(Convert.stringToHexString(str));
                } else {
                    etAck.setText(Convert.hexStringToString(str));
                }
            }catch (Exception e){
                //TODO:handle exception

            }

        }
    });
}
/*******
 * 函数名称:initSpinnerBaudRate
 * 功能描述:初始化波特率的值
 * 参数及返回值说明:*
 *******/
private void initSpinnerBaudRate(){
    //下拉波特率的值
    String[] items={"1200","B2400","B4800","9600","19200","38400","57600","115200","230400","921600"};
    //第一步:为下拉列表定义一个适配器,这里就用到里前面定义的items。
    final ArrayAdapter<String>adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,items);
    //第二步:为适配器配置下拉列表下拉时的菜单样式。
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    //第三步:将适配器添加到下拉列表上
    spBaudRate.setAdapter(adapter);
    //默认选择第6项--57600
    spBaudRate.setSelection(6);
    //下拉串口的值
    String[] uarts={"COM0","COM1","COM2","COM3"};
    final ArrayAdapter<String>adapterUart=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,uarts);
    adapterUart.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spUart.setAdapter(adapterUart);
    spUart.setSelection(2);//默认选择第二项--COM2
}
/*******
 * 函数名称:myClick
 * 功能描述:按钮监听
 * 参数及返回值说明
 *******/

public void myClick(View v) {
    switch(v.getId()) {
        //打开串口
        case R.id.btnOpenUart:
            long longUart = spUart.getSelectedItemId();
            int uart = sectCom[(int) longUart];
            longUart = spBaudRate.getSelectedItemId();
            int com_fd = newPort.openPort(uart, 0, (char) longUart);
            if (com_fd > 0) {
                tvUartStatus.setText("打开成功!...");
            } else {
                tvUartStatus.setText("打开失败!...");}
            break;
        //关闭串口

        case R.id.btnCloseUart:
            newPort.closePort();
            tvUartStatus.setText("已关闭!...");
            break;
        //发送
        case R.id.btnSend:
            String msg = etSend.getText().toString();
            if (chkSendHex.isChecked()) {//以十六进制数发送
                newPort.sendCommand(Convert.hexStringToCharArray(msg));
            } else {//以字符串发送
                newPort.sendCommand(Convert.stringToCharArray(msg));
            }
            break;
        //清除按钮
        case R.id.btnClear:
            etAck.setText("");
            strReceiveData = "";
            break;
        //退出
        case R.id.btnQuit:
            System.exit(0);
        default:
            break;
    }
}
/************
 * 函数名称:handleReceiveData
 * 功能描述:处理数据
 * 参数说明:data,从串口中接收到的数据
 ************/

protected void handleReceivedData(final String data){
    runOnUiThread(new Runnable() {//通过runOnUiThread在线程中执行UI更新操作
        public void run() {
            strReceiveData = strReceiveData + data;
            if (chkAckHex.isChecked()) {//十六进制显示
                etAck.setText(Convert.dataToHexString(strReceiveData));
            }else {
                etAck.setText(Convert.dataToHexString(strReceiveData));}

        }
    });
}

@Override
protected void onDestroy(){
    super.onDestroy();
    newPort.onDestroy();
}

}

E/JIN: WARNING:could not load libuart.so
E/zygote: No implementation found for int com.newland.jni.Linuxc.openUart(int, int) (tried Java_com_newland_jni_Linuxc_openUart and Java_com_newland_jni_Linuxc_openUart__II)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.newland.serialport, PID: 25212
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:6256) 
at android.view.View$PerformClick.run(View.java:24701) 
at android.os.Handler.handleCallback(Handler.java:789) 
at android.os.Handler.dispatchMessage(Handler.java:98) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
Caused by: java.lang.UnsatisfiedLinkError: No implementation found for int com.newland.jni.Linuxc.openUart(int, int) (tried Java_com_newland_jni_Linuxc_openUart and Java_com_newland_jni_Linuxc_openUart__II)
at com.newland.jni.Linuxc.openUart(Native Method)
at com.newland.jni.SerialPort.openPort(SerialPort.java:87)
at com.example.newland.serialport.MainActivity.myClick(MainActivity.java:132)
at java.lang.reflect.Method.invoke(Native Method) 
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
at android.view.View.performClick(View.java:6256) 
at android.view.View$PerformClick.run(View.java:24701) 
at android.os.Handler.handleCallback(Handler.java:789) 
at android.os.Handler.dispatchMessage(Handler.java:98) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
Application terminated.

  • 写回答

1条回答

  • dabocaiqq 2019-07-02 09:55
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)