
这是我的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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)