android – 如何修复java.lang.ArrayIndexOutOfBoundsException:length = 1;索引= 1

android – 如何修复java.lang.ArrayIndexOutOfBoundsException:length = 1;索引= 1,第1张

概述我正在创建一个由串行通信组成的 android应用程序.我收到一个名为 java.lang.ArrayIndexOutOfBoundsException的错误:length = 1; index = 1请告诉我如何修复它 这是我的USB驱动程序: public class UsbDriver { private final Context mApplicationContext; 我正在创建一个由串行通信组成的 android应用程序.我收到一个名为 java.lang.Arrayindexoutofboundsexception的错误:length = 1; index = 1请告诉我如何修复它

这是我的USB驱动程序:

public class UsbDriver {    private final Context mApplicationContext;    private final UsbManager mUsbManager;    @SuppressWarnings("unused")    private final UsbConnectionHandler mConnectionHandler;    private final int VID;    private final int PID;    protected static final String ACTION_USB_PERMISSION = "ch.serverBox.androID.USB";    public static int Device_Exception;    public static UsbDevice Device_Details;    public static UsbEndpoint Data_In_End_Point = null;    public static UsbEndpoint Data_Out_End_Point = null;    public static UsbDeviceConnection USB_Device_Connection;    public UsbDriver(Activity parentActivity,UsbConnectionHandler connectionHandler,int vID,int pID) {        mApplicationContext = parentActivity.getApplicationContext();        mConnectionHandler = connectionHandler;        mUsbManager = (UsbManager) mApplicationContext.getSystemService(Context.USB_SERVICE);        VID = 1027;        PID = 24577;        Device_Exception = 0;    //  init();        Check_Devices();    }    private voID Check_Devices() {        @SuppressWarnings("unused")        int j=0;        HashMap<String,UsbDevice> devList = mUsbManager.getDeviceList();        Iterator<UsbDevice> deviter = devList.values().iterator();        Device_Details = null;        if (devList.size() != 0) {                          while (deviter.hasNext()) {                Device_Details = deviter.next();                if (Device_Details.getvendorID() == VID && Device_Details.getProductID() == PID){                    if (!mUsbManager.hasPermission(Device_Details)){                        onPermissionDenIEd(Device_Details);                    } else {                        UsbDeviceConnection conn = mUsbManager.openDevice(Device_Details);                        if (!conn.claimInterface(Device_Details.getInterface(1),true)){                            return;                        }                        conn.controlTransfer(0x21,34,null,0);                        conn.controlTransfer(0x21,32,new byte[] { (byte) 0x80,0x25,0x00,0x08 },7,0);                        USB_Device_Connection=conn;                         Data_In_End_Point = null;                        Data_Out_End_Point = null;                        UsbInterface usbIf = Device_Details.getInterface(1);                        for (int i = 0; i < usbIf.getEndpointCount(); i++) {                            if (usbIf.getEndpoint(i).getType() == UsbConstants.USB_ENDPOINT_XFER_BulK) {                                if (usbIf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN)                                    Data_In_End_Point = usbIf.getEndpoint(i);                                else                                    Data_Out_End_Point = usbIf.getEndpoint(i);                            }                        }                        if (Data_In_End_Point == null || Data_Out_End_Point == null)                            Device_Exception = 2;                    }                    break;                }j++;            }            if (Device_Details == null) {                Device_Exception = 3;                return;            }        }        else {            Device_Exception = 1;            return;        }    }    public voID onPermissionDenIEd(UsbDevice d) {        UsbManager usbman = (UsbManager) mApplicationContext.getSystemService(Context.USB_SERVICE);        PendingIntent pi = PendingIntent.getbroadcast(mApplicationContext,new Intent(ACTION_USB_PERMISSION),0);        mApplicationContext.registerReceiver(mPermissionReceiver,new IntentFilter(ACTION_USB_PERMISSION));        usbman.requestPermission(d,pi);    }    private class PermissionReceiver extends broadcastReceiver {        private final IPermissionListener mPermissionListener;        public PermissionReceiver(IPermissionListener permissionListener){            mPermissionListener = permissionListener;        }        @OverrIDe        public voID onReceive(Context context,Intent intent) {            mApplicationContext.unregisterReceiver(this);            if (intent.getAction().equals(ACTION_USB_PERMISSION)) {                if (!intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED,false)) {                    mPermissionListener.onPermissionDenIEd((UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE));                } else {                    l("Permission granted");                    UsbDevice dev = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);                    if (dev != null){                        if (dev.getvendorID() == VID && dev.getProductID() == PID) {                            Check_Devices() ;                        }                    }else{                        e("device not present!");                    }                }            }        }    }    private broadcastReceiver mPermissionReceiver = new PermissionReceiver(new IPermissionListener() {        @OverrIDe        public voID onPermissionDenIEd(UsbDevice d) {            l("Permission denIEd on " + d.getdeviceid());        }    });    private static interface IPermissionListener {        voID onPermissionDenIEd(UsbDevice d);    }    public final static String TAG = "USBController";    private voID l(Object msg) {        Log.d(TAG,">==<" + msg.toString() + " >==<");    }    private voID e(Object msg) {        Log.e(TAG,">==< " + msg.toString() + " >==<");    }}

这是我的USB连接处理程序

public interface UsbConnectionHandler {    voID onUsbStopped();    voID onErrorLooperRunningalready();    voID onDeviceNotFound();}

这是我的主要活动:

public class MainActivity extends Activity {    EditText communication_data;    button send;    public static final int targetvendorID = 1027;          public static final int targetProductID = 24577;    public  UsbManager manager;    public  UsbDeviceConnection usbDeviceConnection;    public  UsbInterface usbInterfaceFound = null;    public  UsbEndpoint endpointOut = null;    public  UsbEndpoint endpointIn = null;    public  UsbDevice usbdevice,device_details;    public  UsbEndpoint Listusbendpoint;    private static final int VID = 1027;    private static final int PID = 24577;    @SuppressWarnings("unused")    private static UsbDriver Usb_Driver_class;    Actionbar actionbar;    UsbConnectionHandler connectionHandler;    public static UsbDriver USB_Driver_Child;    public static boolean Communication_Failed,Frame_Ok,Total_Frame_Decoded;    static byte[] Communication_Byte;    HashMap<String,UsbDevice> deviceList= null;    static byte[] sample;    static boolean Communication_Ok;    static int Sequence_No,Response_Time;    Thread Receive;    ByteBuffer buffer;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        //communication_data = (EditText)findVIEwByID(R.ID.editText_comm);        send = (button)findVIEwByID(R.ID.button1_sendin);        send.setonClickListener(new VIEw.OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                Communication_Byte=new byte[1];                if(Check_Devices_Available()==true) {                       int Packet_Size = USB_Driver_Child.Data_In_End_Point.getMaxPacketSize();                    Toast.makeText(MainActivity.this,""+Packet_Size,Toast.LENGTH_LONG).show();                    Receive.start();                    Communication_Ok=false;                    for(int i=0;(i<5 && Communication_Ok!=true);i++)                        Send_Communication_Check_Command();                    if(Communication_Ok)                        Toast.makeText(MainActivity.this,"Communication Successfully Established",1000).show();                    else                        Toast.makeText(MainActivity.this,"Communication Failure",10000).show();                }                               }            private boolean Check_Devices_Available() {                Usb_Driver_class = new UsbDriver(MainActivity.this,connectionHandler,VID,PID);                if(USB_Driver_Child.Device_Exception==0){                    if(USB_Driver_Child.USB_Device_Connection==null || USB_Driver_Child.Data_Out_End_Point==null)                        return false;                       Toast.makeText(MainActivity.this,"Device Found",1000).show();                      return true;                }else if(USB_Driver_Child.Device_Exception==1){                    Toast.makeText(MainActivity.this,"No Devices Attached ",Toast.LENGTH_LONG).show();                     return false;                }else if(USB_Driver_Child.Device_Exception==2){                    Toast.makeText(MainActivity.this,"Device Found,But No End Points",Toast.LENGTH_LONG).show();                       return false;                }else if(USB_Driver_Child.Device_Exception==3){                    Toast.makeText(MainActivity.this,"Unable to Open Device",Toast.LENGTH_LONG).show();                        return false;                }                return false;            }            Thread Receive  = new Thread(new Runnable(){                @SuppressWarnings("unused")                @OverrIDe                public voID run() {                    Sequence_No=0;                    buffer = ByteBuffer.allocate(64);                    sample = new byte[64];                    int Frame_Size;                    UsbRequest request = new UsbRequest();                    int i,j;                    byte [] datarx=new byte[1];                     char q;                    while (true) {                        request.initialize(UsbDriver.USB_Device_Connection,UsbDriver.Data_In_End_Point);                        request.queue(buffer,64);                        if (UsbDriver.USB_Device_Connection.requestWait() == request) {                            sample=buffer.array();                             for(i=0;i<64;i++){                                if(sample[i]=='&'){                                    Communication_Ok=true;                                    break;                                }else if(sample[i]==0x03){                                    if(sample[0]==0x02)                                    //Frame_Ok=true;                                        break;                                }                                                           }                            if(Frame_Ok==true){                                //Frame_Ok=false;                                //if(sample[1]==1)                                //Coil_No=1;                                //else                                //Coil_No=2;                                //Response_Time= (int)(((sample[2]&0x00FF)<<8) + (sample[3]&0x00FF));                                //Total_Frame_Decoded=true;                                //sample = null;                            }                        }                    }                }            });            private voID Send_Communication_Check_Command() {                long i,j;                Communication_Byte[0]='&';                UsbDriver.USB_Device_Connection.bulkTransfer(UsbDriver.Data_Out_End_Point,Communication_Byte,1,0);                for(i=0;(i<1000 && Communication_Ok!=true) ;i++)                        for(j=0;(j<1000 && Communication_Ok!=true);j++);            }        });    }}

这是我的logcat:

E/AndroIDRuntime(2452): FATAL EXCEPTION: mainE/AndroIDRuntime(2452): java.lang.Arrayindexoutofboundsexception: length=1; index=1E/AndroIDRuntime(2452):     at androID.harDWare.usb.UsbDevice.getInterface(UsbDevice.java:155)E/AndroIDRuntime(2452):     at com.developer.milancomm.UsbDriver.Check_Devices(UsbDriver.java:74)E/AndroIDRuntime(2452):     at com.developer.milancomm.UsbDriver.<init>(UsbDriver.java:48)E/AndroIDRuntime(2452):     at com.developer.milancomm.MainActivity.Check_Devices_Available(MainActivity.java:86)E/AndroIDRuntime(2452):     at com.developer.milancomm.MainActivity.onClick(MainActivity.java:63)E/AndroIDRuntime(2452):     at androID.vIEw.VIEw.performClick(VIEw.java:4240)E/AndroIDRuntime(2452):     at androID.vIEw.VIEw$PerformClick.run(VIEw.java:17721)E/AndroIDRuntime(2452):     at androID.os.Handler.handleCallback(Handler.java:730)E/AndroIDRuntime(2452):     at androID.os.Handler.dispatchMessage(Handler.java:92)E/AndroIDRuntime(2452):     at androID.os.Looper.loop(Looper.java:137)E/AndroIDRuntime(2452):     at androID.app.ActivityThread.main(ActivityThread.java:5103)E/AndroIDRuntime(2452):     at java.lang.reflect.Method.invokeNative(Native Method)E/AndroIDRuntime(2452):     at java.lang.reflect.Method.invoke(Method.java:525)E/AndroIDRuntime(2452):     at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)E/AndroIDRuntime(2452):     at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:553)E/AndroIDRuntime(2452):     at dalvik.system.NativeStart.main(Native Method)
解决方法 数组长度为1表示只存在索引0,因为在java数组索引中以0开头!

或者换句话说,数组的边界是Array.length -1

总结

以上是内存溢出为你收集整理的android – 如何修复java.lang.ArrayIndexOutOfBoundsException:length = 1;索引= 1全部内容,希望文章能够帮你解决android – 如何修复java.lang.ArrayIndexOutOfBoundsException:length = 1;索引= 1所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1123216.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存