2016-06-16 126 views
-2

我在打開此活動時遇到此錯誤 我確信藍牙連接的問題最多我真的不知道如何理解這一點錯誤Android應用程序沒有響應java.lang.RuntimeException:無法恢復活動

錯誤日誌

06-16 19:13:31.385 3970-3970/com.example.jaypeetan.mftis E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.example.jaypeetan.mftis, PID: 3970 
                      java.lang.RuntimeException: Unable to resume activity {com.example.jaypeetan.mftis/com.example.jaypeetan.mftis.main_menu}: java.lang.NullPointerException 
                       at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2955) 
                       at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2984) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2401) 
                       at android.app.ActivityThread.access$800(ActivityThread.java:139) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:149) 
                       at android.app.ActivityThread.main(ActivityThread.java:5257) 
                       at java.lang.reflect.Method.invokeNative(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:515) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) 
                       at dalvik.system.NativeStart.main(Native Method) 
                      Caused by: java.lang.NullPointerException 
                       at com.example.jaypeetan.mftis.main_menu.onResume(main_menu.java:134) 
                       at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1192) 
                       at android.app.Activity.performResume(Activity.java:5490) 
                       at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2945) 
                       at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2984)  
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2401)  
                       at android.app.ActivityThread.access$800(ActivityThread.java:139)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:149)  
                       at android.app.ActivityThread.main(ActivityThread.java:5257)  
                       at java.lang.reflect.Method.invokeNative(Native Method)  
                       at java.lang.reflect.Method.invoke(Method.java:515)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)  
                       at dalvik.system.NativeStart.main(Native Method)  

這是我的主菜單 main_menu.java

package es.esy.a4ec.ledonoff; 

import java.io.IOException; 
import java.io.OutputStream; 
import java.lang.reflect.Method; 
import java.util.UUID; 
import android.app.Activity; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothSocket; 
import android.content.Intent; 
import android.os.Build; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

public class index extends Activity { 
    private static final String TAG = "bluetooth1"; 

    Button btnOn, btnOff; 

    private BluetoothAdapter btAdapter = null; 
    private BluetoothSocket btSocket = null; 
    private OutputStream outStream = null; 

    // SPP UUID service 
    private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 

    // MAC-address of Bluetooth module (you must edit this line) 
    private static String address = "30:14:08:13:14:20"; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_index); 

     btnOn = (Button) findViewById(R.id.button); 
     btnOff = (Button) findViewById(R.id.button2); 

     btAdapter = BluetoothAdapter.getDefaultAdapter(); 
     checkBTState(); 

     btnOn.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       sendData("1"); 
       Toast.makeText(getBaseContext(), "Turn on LED", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     btnOff.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       sendData("0"); 
       Toast.makeText(getBaseContext(), "Turn off LED", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

    private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException { 
     if(Build.VERSION.SDK_INT >= 10){ 
      try { 
       final Method m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class }); 
       return (BluetoothSocket) m.invoke(device, MY_UUID); 
      } catch (Exception e) { 
       Log.e(TAG, "Could not create Insecure RFComm Connection",e); 
      } 
     } 
     return device.createRfcommSocketToServiceRecord(MY_UUID); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     Log.d(TAG, "...onResume - try connect..."); 

     // Set up a pointer to the remote node using it's address. 
     BluetoothDevice device = btAdapter.getRemoteDevice(address); 

     // Two things are needed to make a connection: 
     // A MAC address, which we got above. 
     // A Service ID or UUID. In this case we are using the 
     //  UUID for SPP. 

     try { 
      btSocket = createBluetoothSocket(device); 
     } catch (IOException e1) { 
      errorExit("Fatal Error", "In onResume() and socket create failed: " + e1.getMessage() + "."); 
     } 

     // Discovery is resource intensive. Make sure it isn't going on 
     // when you attempt to connect and pass your message. 
     btAdapter.cancelDiscovery(); 

     // Establish the connection. This will block until it connects. 
     Log.d(TAG, "...Connecting..."); 
     try { 
      btSocket.connect(); 
      Log.d(TAG, "...Connection ok..."); 
     } catch (IOException e) { 
      try { 
       btSocket.close(); 
      } catch (IOException e2) { 
       errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + "."); 
      } 
     } 

     // Create a data stream so we can talk to server. 
     Log.d(TAG, "...Create Socket..."); 

     try { 
      outStream = btSocket.getOutputStream(); 
     } catch (IOException e) { 
      errorExit("Fatal Error", "In onResume() and output stream creation failed:" + e.getMessage() + "."); 
     } 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 

     Log.d(TAG, "...In onPause()..."); 

     if (outStream != null) { 
      try { 
       outStream.flush(); 
      } catch (IOException e) { 
       errorExit("Fatal Error", "In onPause() and failed to flush output stream: " + e.getMessage() + "."); 
      } 
     } 

     try  { 
      btSocket.close(); 
     } catch (IOException e2) { 
      errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + "."); 
     } 
    } 

    private void checkBTState() { 
     // Check for Bluetooth support and then check to make sure it is turned on 
     // Emulator doesn't support Bluetooth and will return null 
     if(btAdapter==null) { 
      errorExit("Fatal Error", "Bluetooth not support"); 
     } else { 
      if (btAdapter.isEnabled()) { 
       Log.d(TAG, "...Bluetooth ON..."); 
      } else { 
       //Prompt user to turn on Bluetooth 
       Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
       startActivityForResult(enableBtIntent, 1); 
      } 
     } 
    } 

    private void errorExit(String title, String message){ 
     Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show(); 
     finish(); 
    } 

    private void sendData(String message) { 
     byte[] msgBuffer = message.getBytes(); 

     Log.d(TAG, "...Send data: " + message + "..."); 

     try { 
      outStream.write(msgBuffer); 
     } catch (IOException e) { 
      String msg = "In onResume() and an exception occurred during write: " + e.getMessage(); 
      if (address.equals("00:00:00:00:00:00")) 
       msg = msg + ".\n\nUpdate your server address from 00:00:00:00:00:00 to the correct address on line 35 in the java code"; 
      msg = msg + ".\n\nCheck that the SPP UUID: " + MY_UUID.toString() + " exists on server.\n\n"; 

      errorExit("Fatal Error", msg); 
     } 
    } 
} 

我真的很感謝你的回答,請幫我完成這個計劃提前感謝

回答

1

獲取onCreate方法適配器,從地址獲取遠程設備之前。

btAdapter = BluetoothAdapter.getDefaultAdapter(); 
+0

它仍然給我的錯誤 –

+0

可以共享錯誤日誌 –

+0

過程:com.example.jaypeetan.mftis,PID:3179 了java.lang.RuntimeException:無法恢復活動{com.example.jaypeetan。 mftis/com.example.jaypeetan.mftis.main_menu}:java.lang.NullPointerException –

相關問題