0

したがって、私は基本的にこの問題があります。私は、私の断片からarduinoにデータを転送しようとするまで、私はlogcatにエラーがスローされます:NullPointerExceptionフラグメント内のBluetoothデータ転送

私は、ブルートゥースを介してarduinoと通信しようとすると、すべてが主な活動からarduinoにデータを送信すると大丈夫だったここ
**java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.administradora.prueba.MainActivity$ConnectedThread.write(java.lang.String)' on a null object reference** 

public class ConnectedThread extends Thread { 

    private final InputStream mmInStream; 
    private final OutputStream mmOutStream; 

    //creation of the connect thread 
    public ConnectedThread(BluetoothSocket socket) { 
     InputStream tmpIn = null; 
     OutputStream tmpOut = null; 

     try { 
      //Create I/O streams for connection 
      tmpIn = socket.getInputStream(); 
      tmpOut = socket.getOutputStream(); 
     } catch (IOException e) { } 

     mmInStream = tmpIn; 
     mmOutStream = tmpOut; 
    } 


    public void run() { 
     byte[] buffer = new byte[256]; 
     int bytes; 

     // Keep looping to listen for received messages 
     while (true) { 
      try { 
       bytes = mmInStream.read(buffer);   //read bytes from input buffer 
       String readMessage = new String(buffer, 0, bytes); 
       // Send the obtained bytes to the UI Activity via handler 
       bluetoothIn.obtainMessage(handlerState, bytes, -1, readMessage).sendToTarget(); 
      } catch (IOException e) { 
       break; 
      } 
     } 
    } 
    //write method 
    public void write(String input) { 
     byte[] msgBuffer = input.getBytes();   //converts entered String into bytes 
     try { 
      mmOutStream.write(msgBuffer);    //write bytes over BT connection via outstream 
     } catch (IOException e) { 
      //if you cannot write, close the application 
      Toast.makeText(getBaseContext(), "La Conexión fallo", Toast.LENGTH_LONG).show(); 
      finish(); 

     } 
    } 
}` 

....通信するConnectedThreadクラスであり、ここでは、IMがデータを送信しようとしているところから、私のフラグメントのJavaクラスです:

public class exterior extends Fragment { 

public MainActivity.ConnectedThread mConnectedThread; 
public exterior() { 

    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v=inflater.inflate(R.layout.fragment_exterior,container,false); 

    ToggleButton garage,lucext; 
    garage=(ToggleButton)v.findViewById(R.id.garage); 


    garage.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { 

      if(isChecked){ 

       mConnectedThread.write("7"); 

       Toast.makeText(getActivity(),"On",Toast.LENGTH_SHORT).show(); 
      } 
      else{ 

       Toast.makeText(getActivity(),"Off",Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 

return v; 
} 
} 

誰かが、それを解決する方法のおかげで誰もが知っている

public MainActivity.ConnectedThread mConnectedThread; 

希望***(以下、私はエラーを修正しようとしているが、かなり多くの働くようdidntの追加行があります)。

+1

あなたは私が何を割り当てる必要がありますmConnectedThread –

+0

に何を割り当てることはありませんを追加するには、フラグメントに続いてフラグメント取引

Exterior fragment = new Exterior(); getSupportFragmentManager().beginTransaction().add(android.R.id.content, fragment).commit(); fragment.setConnectedThread(mConnectedThread); 

を開始どこ?助けてください –

+0

Fragment *内の '新しいConnectedThread' *に' mConnectedThread'を割り当てる必要があります。アクティビティ*の値は、明示的に設定しない限り、共有されません。 –

答えて

0

すべてのクラス名の最初には、あなたはすでに主な活動にConnectedThreadオブジェクトを初期化したので、あなたがそのフラグメントでsetterメソッドを作成する必要がありますので、エクステリア

に外観を変更する資本名で開始する必要があります新しく作成されたフラグメントのメインアクティビティからmConnectedThreadを設定します。あなたMainActivityで

あなたがこの方法

public void setConnectedThread(MainActivity.ConnectedThread 
mConnectedThread){ 
    this.mConnectedThread = mConnectedThread; 
} 
+0

fragment.setConnectedThread(mConnectedThread); –

+0

私はこの行でエラーがスローされ、 "シンボルを解決できません"と言います –

+0

あなたはいくつかの基本的なJavaを学ぶ必要があるように聞こえる –