2015-04-02 41 views
-2

我編程一個應用程序,通過藍牙從arduino獲取傳感器數據。如果藍牙插座不可用,爲什麼我的Android應用程序會崩潰?

一切工作只要藍牙插座可用。 如果我關掉arduino並嘗試打開應用程序,那麼我的應用程序崩潰。

public class GetData extends Activity { 

    TextView t1, t2, t3, t4, t5, t6, t7, t8; 
    ImageView schulter,ellenbogen,greifer,pfeil; 
    long cb1, cb2, m1, m2, m3, m4, m5, m6; 
    long[] motor = new long[8]; 
    Handler handler = new Handler(); //Assistent zur Ausführung 
    long timer = 300; //Millisekunden 
    static final double PI = 3.141592653589793 ; 
    InputStream inStream = null; 
    BluetoothSocket btSocket = null; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_get_data); 

     runnable.run(); 
    } 


    public Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      referenceXML(); 
      getDatafromBT(); 
      setLongfromBT(); 

      if(((motor[0] == 2) && (motor[7] == 3)) || ((motor[0] == 4) && (motor[7] == 3))) { 
       setViews(); 
       setImageViews(); 
       XMLbewegungSchulter(); 
       XMLbewegungEllenbogen(); 
       XMLbewegungGreifer(); 
      } 
      handler.postDelayed(runnable,timer); 
     } 
    }; 

這裏是BtConnect.class

public class BtConnect extends Application { 
.... 
.... 
.... 
    public long[] getData() { 
    int bytesAvailable = 0; 
    long[] results = new long[8]; 
    try { 
     bytesAvailable = inStream.available(); 
     if (btSocket.isConnected() && bytesAvailable != 0) { // Prüft ob Verbindung noch besteht und Daten verfügbar sind 

      String StringBuffer = ""; 
      byte[] inByte = new byte[1]; 

      for (int i = 0; i < 8; i++) { 
       while (1 == 1) { 
        inStream.read(inByte); 

        if (inByte[0] == ',') { 
         results[i] = Long.parseLong(StringBuffer, 10); // Zeichenkette in Zahlen wandeln 
         //Toast.makeText(mContext, "Ausgabe von inStream: " + results[i] + "\n", Toast.LENGTH_SHORT).show(); 
         break; 
        } else { 
         StringBuffer += (char) inByte[0]; //Zeichenkette wird solange dazuaddiert, bis ein Komma von inByte[0] bestätigt wird 
        } 
       } 

       StringBuffer = ""; 
      } 
      return results; 
     } 

    } catch (IOException e) { 
     return new long[8]; 
    } 
    return new long[8]; 
} 

}

我知道,我的問題只出現如果我啓用getDatafromBT()。如果我禁用它,那麼我的應用程序開始沒有問題,但我當然不會得到任何數據。

public void getDatafromBT() { 

    BtConnect btConnect = (BtConnect) getApplication(); 
    motor = btConnect.getData(); 
} 

你的意思是這個stacktrace?對不起,我的英文不太好。

java.lang.RuntimeException: Unable to create application de.hs.karlsruhe.hskabot.ws13.BtConnect: java.lang.ClassCastException: de.hs.karlsruhe.hskabot.ws13.BtConnect cannot be cast to de.hs.karlsruhe.hskabot.ws13.GetData 
     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4447) 
     at android.app.ActivityThread.access$1300(ActivityThread.java:141) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
     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.ClassCastException: de.hs.karlsruhe.hskabot.ws13.BtConnect cannot be cast to de.hs.karlsruhe.hskabot.ws13.GetData 
     at de.hs.karlsruhe.hskabot.ws13.BtConnect.onCreate(BtConnect.java:79) 
     at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007) 
     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4444) 
     at android.app.ActivityThread.access$1300(ActivityThread.java:141) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
     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) 
+0

調試時發生了什麼?代碼崩潰在哪裏?哪些日誌語句被打印?打印報表中有什麼?你期望什麼與什麼發生,什麼時候?你有什麼嘗試? – Kon 2015-04-02 14:56:18

+0

它可以幫助你分享**堆棧跟蹤** http://stackoverflow.com/questions/3988788/what-is-a-stack-trace-and-how-can-i-use-it-to-debug -my-application-errors – EpicPandaForce 2015-04-02 15:04:49

回答

0

您正在從null對象獲取屬性。所以NPE。如果您不希望發生異常,請執行if-else檢查:

public void getDatafromBT() { 
    BtConnect btConnect = (BtConnect) getApplication(); 
    if (btConnect != null) 
    motor = btConnect.getData(); 
    else 
    // toast, close app or anything you need app does... 
+0

它看起來像我的btConnect是整個時間null Oo – Steinfeld 2015-04-02 16:13:27

相關問題