2014-12-09 3 views
1

Прием java.lang.RuntimeException: Невозможно уничтожить Активность вПрием java.lang.RuntimeException: Невозможно уничтожить активность {com.android.systemui/com.android.systemui.usb.UsbPermissionActivity}

{com.android.systemui/com.android.systemui.usb.UsbPermissionActivity}: java.lang.NullPointerException 

Это мой журнал кот:

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to destroy activity {com.android.systemui/com.android.systemui.usb.UsbPermissionActivity}: java.lang.NullPointerException 
    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3499) 
    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3517) 
    at android.app.ActivityThread.access$1200(ActivityThread.java:141) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5103) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
    at com.android.systemui.usb.UsbPermissionActivity.onDestroy(UsbPermissionActivity.java:148) 
    at android.app.Activity.performDestroy(Activity.java:5302) 
    at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1117) 
    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3486) 

мой код После onClickListener:

login.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 

       String User_Name; 
       User_Name=username.getText().toString(); 
       Device_Found=0; 
       if(User_Name.toLowerCase().equals("medequip") && password.getText().toString().equals("medequip")) 
       { 
        Communication_Ok=0; Permission_Error=0; 
        checkdeviceconnection(); 
        if(Device_Found==1) 
        { 
         Data_Rx_Index=Data_Index=setTotal_Frame_Received(0); 
         if(Permission_Error==1) 
         checkdeviceconnection(); 
         Receive.start(); 
         long i,j; 
         for(i=0;i<1000;i++) 
         for(j=0;j<1000;j++); 
         if(Communication_Ok==1) 
          Toast.makeText(Medequiplogin.this, "Communication_Ok", 10000).show(); 
         else 
          Toast.makeText(Medequiplogin.this, "Communication Failure", 10000).show(); 
          Intent i3 = new Intent(Medequiplogin.this,Modes.class); 
          startActivity(i3); 
        } 
        else 
        { Toast.makeText(Medequiplogin.this, "Device Connection Problem", 10000).show();   
        return;} 
       } 

       else 
       { 
        Toast.makeText(Medequiplogin.this, "Plesae Enter valid Username and Password", 10000).show(); 
       } 

      } 

     }); 
     clear.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       username.setText(""); 
       password.setText(""); 

      } 
     }); 
    } 



    protected void checkdeviceconnection() 
    { 
     int i,j; 
     String as[]; 
     UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); 
     HashMap<String, UsbDevice> deviceList = manager.getDeviceList(); 
     i = deviceList.size(); 
     if(i==0) 
     { 
      return; 
     } 
     as = new String[i]; 
     deviceList.keySet().toArray(as); 

     for(j=0;j<i;j++) 
     { 
      Device_Detials = (UsbDevice)deviceList.get(as[j]); 
      if((Device_Detials.getVendorId()==targetVendorID) && (Device_Detials.getProductId()==targetProductID)) 
      { 
        break; 
      } 

     } 


     if(Device_Detials!=null) 
     { 
     usbManager = (UsbManager)getSystemService(Context.USB_SERVICE); 
      if(usbManager.hasPermission(Device_Detials)==true) 
      { 
      // Toast.makeText(Medequiplogin.this, "Permission Granted", Toast.LENGTH_LONG).show(); 
       Device_Settings(Device_Detials,j); 
      } 
      else 
      { 
       //PendingIntent intent = null; 
      // Toast.makeText(Medequiplogin.this, "No Permission", Toast.LENGTH_LONG).show(); 
       usbManager.requestPermission(Device_Detials, null); 
       Permission_Error=1; 

       return;   
      } 
     Device_Settings(Device_Detials,j); 


     }  
    } 

UsbDeviceConnection Device_Settings(UsbDevice device,int Port_No) 
{ 
    UsbEndpoint tOut = null; 
    UsbEndpoint tIn = null; 
    UsbInterface usbinterface = device.getInterface(Port_No); 

    if (usbinterface == null) 
    { 
     Toast.makeText(Medequiplogin.this, "Device Found But UnKnown Exception-1", 50000).show(); 
     return null; 
    } 
    int tEndpointCnt = usbinterface.getEndpointCount(); 
    if (tEndpointCnt >= 2) 
    { 
     for (int j = 0; j < tEndpointCnt; j++) 
     { 
      if (usbinterface.getEndpoint(j).getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) 
       { 
        if (usbinterface.getEndpoint(j).getDirection() == UsbConstants.USB_DIR_OUT) 
        { 
         tOut = usbinterface.getEndpoint(j); 
        } 
        else if (usbinterface.getEndpoint(j).getDirection() == UsbConstants.USB_DIR_IN) 
        { 
         tIn = usbinterface.getEndpoint(j); 
        } 
       } 
     } 
     if (tOut != null && tIn != null) 
     { 
      usbInterfaceFound = usbinterface; 
      endpointOut = tOut;   
      endpointIn = tIn; 
      deviceFound = device; 
      if (device != null) 

      { 

       Toast.makeText(Medequiplogin.this, device+" ", Toast.LENGTH_LONG).show(); 
       UsbDeviceConnection connection = usbManager.openDevice(device); 
       if (connection != null && connection.claimInterface(usbInterfaceFound, true)) 
       { 

        connection.controlTransfer(0x21, 34, 0, 0, null, 0, 0); 
        connection.controlTransfer(0x21, 32, 0, 0, new byte[] { (byte) 0x80, 0x25, 0x00, 0x00, 0x00, 0x00, 0x08 }, 7, 0); 
        usbDeviceConnection = connection; 
        usbDeviceConnection_For_Transfer = connection; 
        Communication_Byte[0]='&'; 
        usbDeviceConnection.bulkTransfer(endpointOut,Communication_Byte, 1, 0); 
        Device_Found=1; 
        return usbDeviceConnection; 

       } 

       else 
       { 
        Toast.makeText(Medequiplogin.this, "Device Found But Unable to Open Device(Exception-3)", 50000).show(); 
        usbDeviceConnection = null; 
       } 

     } 
    } 
     else 
     { 
      Toast.makeText(Medequiplogin.this, "Device Found But No End Points(Exception-4)", 50000).show(); 
     } 

    } 
    else 
    { 
     Toast.makeText(Medequiplogin.this, "Device Found But No End Points(Exception-2)", 50000).show(); 
     return null; 

    } 
    return null; 
} 

@SuppressWarnings("static-access") 
public void Manual_Mode(int Total_Size) { 

    int i,j,k; 
    Communication_Ok=0; 
    Data_Rx_Index=Data_Index=setTotal_Frame_Received(0); 
// Toast.makeText(Medequiplogin.this, usbDeviceConnection_For_Transfer+"", 50000).show(); 
    Mode_Selection=0; 
    if(usbDeviceConnection_For_Transfer==null) 
    i=0; 
    else 
    i=0; 
    byte []dataRx_2= new byte[1]; 
    Communication_Error=0; 
    for(k=0;k<5;k++) 
    { 
     dataRx_2[0]='&'; 
     usbDeviceConnection_For_Transfer.bulkTransfer(endpointOut, dataRx_2, 1, 0); 
     for(i=0;i<1000;i++) 
      for(j=0;j<1000;j++); 
     if(Communication_Ok==1) 
     { 

      byte []dataRx_1= new byte[Total_Size+4]; 
      dataRx_1[0]='*'; 
      dataRx_1[Total_Size+4-1]='#'; 
      if(mm.Present_Test_IS_OR_IR==1)  //IR 
      { 
       dataRx_1[1]=(byte)0xA4; //for manual mode 
       dataRx_1[2]=(byte)0xA4; //for manual mode 
      } 
      else //IS 
      { 
       dataRx_1[1]=(byte)0xA5; //for manual mode 
       dataRx_1[2]=(byte)0xA5; //for manual mode 
      } 
      for(i=0;i<Total_Size;i++) 
      { 
       dataRx_1[i+3]=(byte)((mm.Checked_Buttons[(int) i])+0x30); 
      } 
      usbDeviceConnection_For_Transfer.bulkTransfer(endpointOut, dataRx_1, Total_Size+4, 0); 
      break; 
     }  
    } 
    if(k>=4) 
    Communication_Error=1;  
} 
public static int getTotal_Frame_Received() 
     { 
      return Total_Frame_Received; 
     } 

public static int setTotal_Frame_Received(int total_Frame_Received) 
     { 
      Total_Frame_Received = total_Frame_Received; 
      return total_Frame_Received; 
     } 
Thread Receive = new Thread(new Runnable() 
    { 

    @SuppressWarnings("static-access") 
    @Override 
    public void run() 
    { 
     ByteBuffer buffer = ByteBuffer.allocate(100); 
     UsbRequest request = new UsbRequest(); 
     int i,j; 
     byte [] datarx=new byte[1]; 
     while (true) 
     { 
      request.initialize(usbDeviceConnection, endpointIn); 
      request.queue(buffer, 100); 
      if (usbDeviceConnection.requestWait() == request) 
      { 
       if(Data_Rx_Index==0) 
       Data_Index=0; 
       for(i=0;i<100;i++) 
       { 
        Data_Recevied_From_MC [i]= buffer.get(i); 
        Data_Index=i; 
        if(Data_Recevied_From_MC [i]=='#') 
        break; 
       } 
       byte [] Data_Recevied_From_MC_1=new byte [i-1]; 
       if(Data_Recevied_From_MC [0]=='&') 
       { 
        Communication_Ok=1;Data_Rx_Index=0; 

       } 
       if(Data_Recevied_From_MC [0]=='*' && Data_Recevied_From_MC [Data_Index]=='#' && Mode_Selection==1) 
       { 
        Data_Recevied_From_MC_1[0]=Data_Recevied_From_MC[1]; 
        Data_Recevied_From_MC_1[1]=Data_Recevied_From_MC[2]; 
        Data_Recevied_From_MC_1[2]=Data_Recevied_From_MC[3]; 
        Data_Recevied_From_MC_1[3]=Data_Recevied_From_MC[4]; 
        /*for(j=0;j<i;j++) 
        { 
         if(Data_Recevied_From_MC[j+2]!='#') 
          Data_Recevied_From_MC_1[j]= (Data_Recevied_From_MC[j+2]); 
         else 
          break; 
        } */ 
        ByteBuffer buffer_1 = ByteBuffer.wrap(Data_Recevied_From_MC_1); 
        Resistance=buffer_1.getFloat(); 
        setTotal_Frame_Received(1); 
       } 
       else if(Data_Recevied_From_MC [0]=='*' && Data_Recevied_From_MC [Data_Index]=='#') 
       { 

        Test_Point_No=(int)Data_Recevied_From_MC[1]; 
        if(mm.Present_Test_IS_OR_IR==1) 
        { 
         for(j=0;j<i;j++) 
         { 
          if(Data_Recevied_From_MC[j+2]!='#') 
           Data_Recevied_From_MC_1[j]= (Data_Recevied_From_MC[j+2]); 
          else 
           break; 
         } 
         ByteBuffer buffer_1 = ByteBuffer.wrap(Data_Recevied_From_MC_1); 
         Resistance=buffer_1.getFloat(); 
        } 
        else 
        { 
         Current=(int)Data_Recevied_From_MC[2]; 
        } 
        setTotal_Frame_Received(1); 
       } 
       runOnUiThread(new Runnable() 
       { 
        @Override 
        public void run() 
        { 
        }}); 
       } 
     else 
      { 
      Toast.makeText(Medequiplogin.this, "No data received", 50000).show(); 
      break; 
      } 

     } 

    } 
    }); 

Когда я был S терпкий Debugging я получил strucked на линии 172 в permission_error т.е. = 1 ... после того, как линия 172 показывает СОЖАЛЕНИЮ SYSTEM UI STOPPED в андроида экране Вот мой код:

protected void checkdeviceconnection() 
     { 
      int i,j; 
      String as[]; 
      UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); 
      HashMap<String, UsbDevice> deviceList = manager.getDeviceList(); 
      i = deviceList.size(); 
      if(i==0) 
      { 
       return; 
      } 
      as = new String[i]; 
      deviceList.keySet().toArray(as); 

      for(j=0;j<i;j++) 
      { 
       Device_Detials = (UsbDevice)deviceList.get(as[j]); 
       if((Device_Detials.getVendorId()==targetVendorID) && (Device_Detials.getProductId()==targetProductID)) 
       { 
         break; 
       } 

      } 


      if(Device_Detials!=null) 
      { 
      usbManager = (UsbManager)getSystemService(Context.USB_SERVICE); 
       if(usbManager.hasPermission(Device_Detials)==true) 
       { 
       // Toast.makeText(Medequiplogin.this, "Permission Granted", Toast.LENGTH_LONG).show(); 
        Device_Settings(Device_Detials,j); 
       } 
       else 
       { 
        //PendingIntent intent = null; 
       // Toast.makeText(Medequiplogin.this, "No Permission", Toast.LENGTH_LONG).show(); 
        usbManager.requestPermission(Device_Detials, null); 
        Permission_Error=1; 

        return;   
       } 
      Device_Settings(Device_Detials,j); 


      }  
     } 
UsbDeviceConnection Device_Settings(UsbDevice device,int Port_No) 
{ 
    UsbEndpoint tOut = null; 
    UsbEndpoint tIn = null; 
    UsbInterface usbinterface = device.getInterface(Port_No); 

    if (usbinterface == null) 
    { 
     Toast.makeText(Medequiplogin.this, "Device Found But UnKnown Exception-1", 50000).show(); 
     return null; 
    } 
    int tEndpointCnt = usbinterface.getEndpointCount(); 
    if (tEndpointCnt >= 2) 
    { 
     for (int j = 0; j < tEndpointCnt; j++) 
     { 
      if (usbinterface.getEndpoint(j).getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) 
       { 
        if (usbinterface.getEndpoint(j).getDirection() == UsbConstants.USB_DIR_OUT) 
        { 
         tOut = usbinterface.getEndpoint(j); 
        } 
        else if (usbinterface.getEndpoint(j).getDirection() == UsbConstants.USB_DIR_IN) 
        { 
         tIn = usbinterface.getEndpoint(j); 
        } 
       } 
     } 
     if (tOut != null && tIn != null) 
     { 
      usbInterfaceFound = usbinterface; 
      endpointOut = tOut;   
      endpointIn = tIn; 
      deviceFound = device; 
      if (device != null) 

      { 

       Toast.makeText(Medequiplogin.this, device+" ", Toast.LENGTH_LONG).show(); 
       UsbDeviceConnection connection = usbManager.openDevice(device); 
       if (connection != null && connection.claimInterface(usbInterfaceFound, true)) 
       { 

        connection.controlTransfer(0x21, 34, 0, 0, null, 0, 0); 
        connection.controlTransfer(0x21, 32, 0, 0, new byte[] { (byte) 0x80, 0x25, 0x00, 0x00, 0x00, 0x00, 0x08 }, 7, 0); 
        usbDeviceConnection = connection; 
        usbDeviceConnection_For_Transfer = connection; 
        Communication_Byte[0]='&'; 
        usbDeviceConnection.bulkTransfer(endpointOut,Communication_Byte, 1, 0); 
        Device_Found=1; 
        return usbDeviceConnection; 

       } 

       else 
       { 
        Toast.makeText(Medequiplogin.this, "Device Found But Unable to Open Device(Exception-3)", 50000).show(); 
        usbDeviceConnection = null; 
       } 

     } 
    } 
     else 
     { 
      Toast.makeText(Medequiplogin.this, "Device Found But No End Points(Exception-4)", 50000).show(); 
     } 

    } 
    else 
    { 
     Toast.makeText(Medequiplogin.this, "Device Found But No End Points(Exception-2)", 50000).show(); 
     return null; 

    } 
    return null; 
} 
+0

Показать связанный код. Что такое линия UsbPermissionActivity.java:148? –

+0

Можете ли вы показать эту строку? Исключение исключения Null указателя. –

+0

Я отправил свой код выше..после onClickListener – Lakshmansundeep

ответ

1

Я столкнулся с этой же проблемой. Это происходило на Android 4.4.2, но отлично работало на 5.0. Я был в состоянии решить эту проблему, следуя примеры здесь:

http://developer.android.com/guide/topics/connectivity/usb/host.html

В частности, мне пришлось переместить registerReceiver в OnCreate() вместо OnStart().

Вы должны попытаться упростить код до меньшего тестового примера, который следует за документированным шаблоном на главной странице usb.

Смежные вопросы