Florent Just Posté(e) 14 mars 2012 Share Posté(e) 14 mars 2012 Bonjour, j'essaye de m'initier au developpement android et je voudrais faire une application de chat par bluetooth. du coup j'ai suivi quelque tuto que je me permet de cité : http://www.tutos-android.com/utilisation-bluetooth-application-android J'arrive a allumer le peripherique mais je n'arrive pas a faire la decouverte de nouveau peripherique. je vous presente mon code : Ma classe activity : package blueWorld.blueChat; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.TextView; import android.widget.Toast; public class PeripheriqueActivity extends Activity { private BlueServices blueservices; private MyException exception; private Button scanPeriph; private CheckBox activblue; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.peripherique); blueservices = new BlueServices(); exception = new MyException(); scanPeriph = (Button) findViewById(R.id.scanPeriph); activblue = (CheckBox) findViewById(R.id.activbluetooth); this.AddListener(); } //public void AddListener() public void AddListener() { activblue.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if ( isChecked ) { try { String blueStatus = blueservices.ActivateBlue(); Toast.makeText(PeripheriqueActivity.this, blueStatus, Toast.LENGTH_SHORT).show(); } catch(Exception e) { exception.TraiteException(PeripheriqueActivity.this, e); } } else { try { String blueStatus = blueservices.DisableBlue(); Toast.makeText(PeripheriqueActivity.this, blueStatus, Toast.LENGTH_SHORT).show(); } catch(Exception e) { exception.TraiteException(PeripheriqueActivity.this, e); } } } }); scanPeriph.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { try{ blueservices.ScanDevices(PeripheriqueActivity.this); }catch (Exception e) { Toast.makeText(PeripheriqueActivity.this, "erreur " + e, Toast.LENGTH_SHORT).show(); } } }); } } Ma classe qui gère le bluetooth package blueWorld.blueChat; import java.util.ArrayList; import java.util.Set; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.widget.ArrayAdapter; import android.widget.Toast; public class BlueServices extends Activity { private final BluetoothAdapter blueAdapter; private final MyBroadcastReceiver blueReceiver; protected Set<BluetoothDevice> mArrayAdapter; public BlueServices() { blueAdapter = BluetoothAdapter.getDefaultAdapter(); blueReceiver = new MyBroadcastReceiver(); } public boolean GetEtat() { if (blueAdapter.isEnabled()) { return true; } else { return false; } } public String ActivateBlue() { String returnedString = ""; if (!blueAdapter.isEnabled()) { try { blueAdapter.enable(); returnedString = "Le Bluetooth est activé"; } catch(Exception e) { returnedString = "Erreur : " + e.toString(); } } return returnedString; } public String DisableBlue() { String returnedString = ""; if (blueAdapter.isEnabled()) { try { blueAdapter.disable(); returnedString = "Le Bluetooth est désactivé"; } catch(Exception e) { returnedString = "Erreur : " + e.toString(); } } return returnedString; } public Set<BluetoothDevice> KnownDevices() { Set<BluetoothDevice> pairedDevices = blueAdapter.getBondedDevices(); return pairedDevices; } //public Set<BluetoothDevice> ScanDevices() public void ScanDevices(Context context) { try{ Toast.makeText(BlueServices.this, "demarage de la decouverte ", Toast.LENGTH_SHORT).show(); //blueAdapter.startDiscovery(); }catch (Exception e) { Toast.makeText(BlueServices.this, "erreur : " + e, Toast.LENGTH_SHORT).show(); } //return pairedDevices; } protected void onDestroy() { super.onDestroy(); blueAdapter.cancelDiscovery(); unregisterReceiver(blueReceiver); } public void ConnectDevice() { } public void DisconnectionDevice() { } } Et mon brodcast receiver package blueWorld.blueChat; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); if (BluetoothDevice.ACTION_FOUND.equals(action)) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); Toast.makeText(context, "New Device = " + device.getName(), Toast.LENGTH_SHORT).show(); } } } Lorsque je clique sur le bouton "scanPeriph" j'ai le droit à un java.lang.NullPointerException. Une idée d'où cela peux venir? Merci Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 14 mars 2012 Share Posté(e) 14 mars 2012 Si tu as un NullPointerException, c'est que tu as quelque part une variable non initialisée. Regarde dans les traces de l'exception, tu y trouveras l'indication de la ligne dans ton code où cela se produit. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Florent Just Posté(e) 16 mars 2012 Auteur Share Posté(e) 16 mars 2012 (modifié) Le NullPointerException semble vernir du e. quand je fais e.getmessage() il me dit erreur : null du coup ques ce que cela veux dire? qu'il n y a pas d'erreur? du coup pourquoi passe dans le catch. J'ai du mal à comprendre. Modifié 16 mars 2012 par Florent Just Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 16 mars 2012 Share Posté(e) 16 mars 2012 Et il est où, le e.getMessage(), dans ton code ? je ne le vois pas... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Maraumax Posté(e) 16 mars 2012 Share Posté(e) 16 mars 2012 J'ai juste survolé le code, mais j'ai vu que ça : public class BlueServices extends Activity { Ton extends ne sert à rien la ! Tu peut le retrirer. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Florent Just Posté(e) 21 mars 2012 Auteur Share Posté(e) 21 mars 2012 j'ai changer le listener sur le scanPeriph qui agit comme ca maintenant : scanPeriph.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { try{ blueservices.ScanDevices(PeripheriqueActivity.this); }catch (Exception e) { Toast.makeText(PeripheriqueActivity.this, "erreur " + e.getMessage(), Toast.LENGTH_SHORT).show(); } } }); d'où le e.getMessage qui m'affiche null. de plus mon public class BlueServices extends Activity { me permet d'avoir accès au Toast dans la classe blueservices J'ai modifier le code, j'ai enlever l'extend activity et ai retourné une String a la place ce qui donne ceci: Dans mon Activity : scanPeriph.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { try{ String message = blueservices.ScanDevices(PeripheriqueActivity.this); Toast.makeText(PeripheriqueActivity.this, message, Toast.LENGTH_SHORT).show(); }catch (Exception e) { Toast.makeText(PeripheriqueActivity.this, "erreur " + e.getMessage(), Toast.LENGTH_SHORT).show(); } } }); Dans ma classe BlueServices : public String ScanDevices(Context context) { String message = ""; try{ blueAdapter.startDiscovery(); message = "je scan !!"; }catch (Exception e) { message = "erreur : " + e.getMessage(); } return message; } du coup maintenant il arrive dans scandevices et m'affiche "erreur : null" Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 21 mars 2012 Share Posté(e) 21 mars 2012 Si tu obtiens le message "erreur : null", ton exception n'est pas nulle (sinon tu aurais un NPE), mais c'est que le message de l'exception est nul Pour avoir plus d'info, il te suffirait de mettre un log lors de la survenance de l'exception, et tu aurais une indication beaucoup plus détaillée de ce qui se passe, visible dans le LogCat }catch (Exception e) { Log.d("MonTag", "erreur scan devices", e); message = "erreur : " + e.getMessage(); } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.