- Forum-Beiträge: 9
22.05.2014, 15:43:15 via Website
22.05.2014 15:43:15 via Website
Hallo zusammen, ich komme absolut nicht weiter.
Ich habe folgende Klasse, die über eine Timerschleife Daten von einer usb verbindung abholt. Über diese Verbindung sollen verschiedene Activities gestartet werden können.
Ausgangspunkt ist dabei diese Activity:
public class BlackScreen extends Activity {
private Timer myTimer;
public boolean validation = false,
timer = false;
public static boolean connect = false;
public static boolean open = false;
public static UsbDeviceConnection connection;
public static UsbEndpoint endpointOUT, endpointIN;
private static UsbManager mManager = null;
private UsbInterface intf;
private Boolean closeRequested = false;
UsbDevice device;
SenderClass sender = new SenderClass();
EmpfaengerClass empfang = new EmpfaengerClass();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.black_screen);
Button screen = (Button) findViewById(R.id.blackscreen);
screen.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sender.sendData('0', '1', new byte[] {});
}
});
on();
}
public boolean GetUSBDevices(Context context) {
mManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
// check for existing devices
for (UsbDevice device : mManager.getDeviceList().values()) {
if((device.getVendorId() == (int)0x04D8) && (device.getProductId() == (int)0x003F)) {
if(mManager.hasPermission(device)== true) {
intf = device.getInterface(0);
endpointOUT = intf.getEndpoint(1);
endpointIN = intf.getEndpoint(0);
connection = mManager.openDevice(device);
if(connection != null) {
connection.claimInterface(intf, true);
} else {
return false;
}
}
else{
return false;
}
}
}
return true;
}
private void on() {
// Verbindung aufbauen
validation = GetUSBDevices(getBaseContext());
if (validation == true) {
connect = true;
myTimer = new Timer();
myTimer.schedule(new TimerTask() {
public void run() {
timer = true;
TimerMethod();
}
}, 0, 100);
} else {
if (timer == true) {
myTimer.cancel();
}
connect = false;
}
}
// Dauerschleife
private void TimerMethod() {
this.runOnUiThread(Timer_Tick);
}
Runnable Timer_Tick = new Runnable() {
public void run() {
if(sender.isGesendet()) {
sender.setGesendet(false);
empfang.readData();
}
}
};
So in dem Part hier ganz unten empfang.readData(9 rufe ich eine weitere Activity auf über die mit startActivity weitere gestartet werden können.
public class EmpfaengerClass extends Activity {
SenderClass sender = new SenderClass();
private UsbDeviceConnection connection;
private UsbEndpoint endpointIN;
public static int cardStatus, altCardStatustimeSek, kalibrierCounter, htt,
id, mode;
public char rxClass, rxCommand;
public byte[] rxData = new byte[50];
public byte[] Buffer = new byte[64];
public static int countdown;
public void readData() {
connection = BlackScreen.getConnection();
endpointIN = BlackScreen.getEndpointIN();
int result = 0;
int dataLength = 0;
byte crc = 0;
int tempLB, tempHB;
byte[] toRead = new byte[64];
do {
result = connection.bulkTransfer(endpointIN, toRead, toRead.length,
1000);
} while (result < 0);
dataLength = 0;
crc = 0x3F;
crc ^= toRead[0];
rxClass = (char) toRead[1];
crc ^= toRead[1];
rxCommand = (char) toRead[2];
crc ^= toRead[2];
dataLength = toRead[3];
crc ^= dataLength;
for (int i = 0; i < dataLength; i++) {
rxData[i] = toRead[i + 4];
crc ^= rxData[i];
}
crc ^= toRead[dataLength + 4];
if (crc == 0) {
switch (rxClass) {
case '0':
switch (rxCommand) {
case '1':
cardStatus = 0x00 << 24 | rxData[0] & 0xff;
switch (cardStatus) {
case 0:
case 1:
case 2:
case 4:
case 5:
startActivity(new Intent(this, MeldungScreen.class));
break;
case 3:
sender.sendData('2', '9', new byte[] {});
break;
}
break;
case '2':
break;
case '4':
mode = 0x00 << 24 | rxData[0] & 0xff;
startActivity(new Intent(this, HTTScreen.class));
break;
}
break;
.......
Beim Aufruf startActivity(new Intent(this, HTTScreen.class)); kommt es zu folgender Fehlermeldung
05-22 15:40:24.965: E/AndroidRuntime(32026): FATAL EXCEPTION: main
05-22 15:40:24.965: E/AndroidRuntime(32026): java.lang.NullPointerException
05-22 15:40:24.965: E/AndroidRuntime(32026): at android.content.ContextWrapper.getPackageName(ContextWrapper.java:127)
05-22 15:40:24.965: E/AndroidRuntime(32026): at android.content.ComponentName.<init>(ComponentName.java:75)
05-22 15:40:24.965: E/AndroidRuntime(32026): at android.content.Intent.<init>(Intent.java:3301)
05-22 15:40:24.965: E/AndroidRuntime(32026): at gui.hypoxcontrol.SenderClass.sendData(SenderClass.java:47)
05-22 15:40:24.965: E/AndroidRuntime(32026): at gui.hypoxcontrol.BlackScreen$2.onClick(BlackScreen.java:54)
05-22 15:40:24.965: E/AndroidRuntime(32026): at android.view.View.performClick(View.java:4088)
05-22 15:40:24.965: E/AndroidRuntime(32026): at android.view.View$PerformClick.run(View.java:16984)
05-22 15:40:24.965: E/AndroidRuntime(32026): at android.os.Handler.handleCallback(Handler.java:615)
05-22 15:40:24.965: E/AndroidRuntime(32026): at android.os.Handler.dispatchMessage(Handler.java:92)
05-22 15:40:24.965: E/AndroidRuntime(32026): at android.os.Looper.loop(Looper.java:137)
05-22 15:40:24.965: E/AndroidRuntime(32026): at android.app.ActivityThread.main(ActivityThread.java:4745)
05-22 15:40:24.965: E/AndroidRuntime(32026): at java.lang.reflect.Method.invokeNative(Native Method)
05-22 15:40:24.965: E/AndroidRuntime(32026): at java.lang.reflect.Method.invoke(Method.java:511)
05-22 15:40:24.965: E/AndroidRuntime(32026): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
05-22 15:40:24.965: E/AndroidRuntime(32026): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-22 15:40:24.965: E/AndroidRuntime(32026): at dalvik.system.NativeStart.main(Native Method)
Rufe ich das ganze nicht über empfang.readData() auf sondern kopiere den Code in die BlackScreen Activity dann funktioniert alles komischweise.
Ich hoffe es ist verständlich was ich vorhabe
Vielen Dank
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.