Problem mit Intent und startActivity

  • Antworten:3
Mario W
  • Forum-Beiträge: 9

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

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

22.05.2014, 17:06:13 via Website

Nullpointer Exception in SenderClass Zeile 47. Welche Zeile ist das?

Antworten
Mario W
  • Forum-Beiträge: 9

23.05.2014, 06:19:53 via Website

Guten morgen,

es handelt sich um Zeile startActivity(new Intent(SenderClass.this, HTTScreen.class));

diese funktioniert nur nicht in der EmpfaengerClass Activity, benutze ich diesen Aufruf in der BlackScreen Activity funktioniert es komischerweise

— geändert am 23.05.2014, 07:09:37

Antworten
Mario W
  • Forum-Beiträge: 9

23.05.2014, 07:32:48 via Website

Ich habe das Problem gelöst.
Ich habe die onCreateMethode noch eingefügt und dann meine readData Methode dort aufgerufen und schon funktioniert es :)

Antworten