NullPointerException

  • Antworten:11
Celebration
  • Forum-Beiträge: 8

06.12.2012, 21:48:04 via Website

Hallo Leute,
Ich entwickle gerade meine erste konkrete Android App. Sie soll als Bluetoothtastatur der Playstation 3 dienen.
Nun bin ich gerade Mal so weit, dass er mit Bluetooth einschaltet, falls es noch nicht aktiv ist. Ich möchte, dass er alle Geräte in der Nähe absucht und in der ListView anzeigt. Habe es letztens so hinbekommen, dass er mir alle schon einmal gekoppelte Geräte anzeigt, aber nach neuen Geräten möchte er nicht suchen. Nun wollte ich es so machen, dass nach dem starten des Bluetooth er automatisch nach Geräten in der Umgebung suchen soll.

1package code.bluetoothkeyboard;
2
3import java.util.ArrayList;
4import java.util.Set;
5
6import android.os.Bundle;
7import android.app.Activity;
8import android.bluetooth.BluetoothAdapter;
9import android.bluetooth.BluetoothDevice;
10import android.content.BroadcastReceiver;
11import android.content.Context;
12import android.content.Intent;
13import android.content.IntentFilter;
14import android.util.Log;
15import android.view.Menu;
16import android.view.View;
17import android.view.View.OnClickListener;
18import android.widget.AdapterView;
19import android.widget.AdapterView.OnItemClickListener;
20import android.widget.ArrayAdapter;
21import android.widget.Button;
22import android.widget.ListView;
23import android.widget.TextView;
24import android.widget.Toast;
25
26public class StartActivity extends Activity implements OnItemClickListener {
27
28 // Alle Attribute werden erzeugt
29 String tag = "Sunny";
30 ArrayAdapter<String> showPairedDevices;
31 ArrayAdapter<String> listadapter;
32
33 ListView listview;
34 BluetoothAdapter btAdapter;
35 Set<BluetoothDevice> devicesArray;
36
37 ArrayList<String> newDevices;
38 ArrayList<String> pairedDevices;
39 ArrayList<BluetoothDevice> devices;
40 BluetoothDevice selectedDevice;
41
42 IntentFilter filter;
43 BroadcastReceiver receiver;
44
45 Button scannen;
46 Button verbinden;
47
48 TextView tvName;
49 TextView tvAdresse;
50
51 ServerBluetooth sb;
52
53
54 @Override
55 public void onCreate(Bundle savedInstanceState) {
56 super.onCreate(savedInstanceState);
57
58 setContentView(R.layout.start);
59 Log.i(tag, "show layou");
60 init(); //Ausführen der Methode init()
61
62 Log.i(tag, "init method");
63 if (btAdapter == null) { //Falls kein Bluetooth auf dem Gerät vorhanden ist
64 Toast.makeText(getApplicationContext(), //Soll er eine kleine Meldung geben
65 "Kein Bluetooth auf diesem Gerät verfügbar", 0).show();
66 finish(); //Anschliessend soll er die Activity schliessen
67 }
68
69 else {
70 if (!btAdapter.isEnabled()) { //Falls Bluetooth nicht aktiviet wurde
71 turnOnBT(); //Soll Bluetooth eingeschaltet werden mit der Methode turnOnBt()
72 }
73
74 getPairedDevices(); //Hier holt er alle Geräte die schon einmal gekoppelt wurden
75 }
76
77 verbinden.setOnClickListener(new OnClickListener() {
78 public void onClick(View v) {
79 verbinden();
80 }
81 });
82 scannen.setOnClickListener(new OnClickListener() {
83
84 public void onClick(View v) {
85 // TODO Auto-generated method stub
86 startDiscovery();
87 Log.i(tag, "suche lauft");
88 }
89
90 });
91 }
92
93 private void startDiscovery() { //Methode sucht nach Geräten in der Umgebung
94 // TODO Auto-generated method stub
95 btAdapter.startDiscovery(); //Startet die Suche
96 }
97
98 private void turnOnBT() { //Schaltet Bluetooth ein
99 // TODO Auto-generated method stub
100 Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); //Fragt den Benutzer ob Bluetooth eingeschaltet werden darf mit der Zulassung
101 //das Bluetooth auf sichtbar eingestellt wird
102 startActivityForResult(intent, 1); // startet eine Activity mit dem oben erstellten Intent
103 }
104
105 public void onBackPressed() { //Wird der "Zurück" Button gedrückt, soll er die Activity beenden und die Anwendung
106 finish(); //Beendet die Activty
107 System.exit(0); //Ruft den Konstruktor auf der klasse onStop()
108 }
109
110 private void getPairedDevices() { //MEthode um alle gepaarten Geräte anzuzeigen
111 // TODO Auto-generated method stub
112 devicesArray = btAdapter.getBondedDevices(); //holt alle geräte, die schon einmal gepaart wurden mit dem Handy und speichert diese in eine ArrayList ab
113 if (devicesArray.size() > 0) { //wenn die ArrayList grösser als 0 ist
114 for (BluetoothDevice device : devicesArray) { //loop für devicesArray
115 pairedDevices.add(device.getName() + "|" + device.getAddress());//eintragen der geräte mit name und adresse in eine ArrayList
116 }
117 }
118
119 showPairedDevices = new ArrayAdapter<String>(this,
120 android.R.layout.simple_list_item_1, pairedDevices); //initalisieren und füllen eines ArrayAdapter mit der ArrayList pairedDevices
121
122 listview.setAdapter(showPairedDevices); //anzeigen des ArrayAdapter in der Listview
123
124 }
125
126 private void init() {
127 // TODO Auto-generated method stub
128 // Alle Attribute werden initialisiert
129 listview = (ListView) findViewById(R.id.bluetoothListe);
130 listview.setOnItemClickListener(this);
131 newDevices = new ArrayList<String>();
132 listadapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, newDevices);
133 sb = new ServerBluetooth(btAdapter);
134 verbinden = (Button) findViewById(R.id.verbinden);
135 scannen = (Button) findViewById(R.id.scannen);
136
137 tvName = (TextView) findViewById(R.id.btName);
138 tvAdresse = (TextView) findViewById(R.id.btAdress);
139
140 btAdapter = BluetoothAdapter.getDefaultAdapter();
141 pairedDevices = new ArrayList<String>();
142 filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
143 devices = new ArrayList<BluetoothDevice>();
144
145 receiver = new BroadcastReceiver() {
146
147 @Override
148 public void onReceive(Context context, Intent intent) {
149 // TODO Auto-generated method stub
150Log.i(tag, "receiver create");
151 String action = intent.getAction(); //der intent speichert eine gefundene Action als String ab. Action ist hier als Gerät gedacht
152 if (BluetoothDevice.ACTION_FOUND.equals(action)) { //wenn der gefundene action mit dem action vom string übereinstimmt
153 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); //dann soll der intent die action holen und als device abspeichern der klasse BLuetoothDevice
154 devices.add(device);//
155 newDevices.add(device.getName() + "|" + device.getAddress()); //jedes gefundene Gerät wird in eine ArrayList abgespeichert
156 }
157
158 else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) { //wenn die action der action_discovery_started gleicht bzw. wenn startDiscovery() aufgerufen wird
159 // soll die suche starten und eine Meldung ausgeben, dass die suche läuft
160 Log.i(tag, "action discovery started");
161 Toast.makeText(getApplicationContext(), "Suche läuft!", Toast.LENGTH_SHORT).show();
162 } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { // nach 12sek bricht er die suche ab und ruft automatisch cancelDiscovery() auf
163 // soll eine neue Liste angezeigt werden mit den gefundenen Geräten
164 listview.setAdapter(listadapter);
165
166 } else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
167 // falls Bluetooth während der Ausführung des Programms ausgeschaltet wird
168 // soll, sie wieder eingeschaltet werden
169 turnOnBT();
170 }
171 }
172
173 };
174
175 this.registerReceiver(receiver, filter); //Receiver wird im System registriert
176 filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED); //Filter, der nur Actions von ACTION_DISCOVERY_STARTED abfängt
177 this.registerReceiver(receiver, filter);//Receiver wird im System registriert
178 filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);//Filter, der nur Actions von ACTION_DISCOVERY_FINISHED abfängt
179 this.registerReceiver(receiver, filter);//Receiver wird im System registriert
180 filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);//Filter, der nur Actions von ACTION_STATE_CHANGED abfängt
181 }
182
183 private void verbinden() {
184 // TODO Auto-generated method stub
185
186 if (tvName.getText().length() < 2) { //Falls der Text in der TextView kleiner als 2 ist bzw. kein Element der Liste gewählt wurde
187 Toast.makeText(getApplicationContext(),
188 "Bitte zuerst ein Gerät aus der Liste auswählen",
189 Toast.LENGTH_SHORT).show();//Mache eine Meldung
190 } else {
191 Log.i(tag, "start verbindung");//Sonst
192 sb.start(); //starte den Thread
193 }
194
195 }
196
197
198 protected void onPause() { //Wird die App unerwartet pausiert
199 unregisterReceiver(receiver); //muss der Receiver wieder aus dem System genommen werden
200 super.onPause();
201
202 }
203
204 protected void onResume() { //Wird die App fortgesetzt
205 registerReceiver(receiver, filter); //muss der Receiver im System wieder registriert werden
206 super.onResume();
207
208 }
209
210 protected void onStop() { //Wird die App gestoppt
211 unregisterReceiver(receiver);//muss der Receiver wieder aus dem System genommen werden
212 super.onStop();
213 }
214
215 protected void onDestroy() { //Wird der Prozess der App zerstört
216 unregisterReceiver(receiver);//muss der Receiver wieder aus dem System genommen werden
217 super.onDestroy();
218 }
219
220 @Override
221 public boolean onCreateOptionsMenu(Menu menu) { //Erstellt ein Menü, wenn man den Menü Button klickt
222 getMenuInflater().inflate(R.menu.start, menu);
223 return true;
224 }
225
226 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
227 super.onActivityResult(requestCode, resultCode, data);
228 if (resultCode == RESULT_CANCELED) { //Falls der Benutzer bei der Bluetoothabfrage "nein" drückt
229 Log.i(tag, "btCheck");
230 Toast.makeText(getApplicationContext(),
231 "Bluetooth muss eingeschaltet sein!", Toast.LENGTH_SHORT)
232 .show(); //erscheint eine Meldung das Bluetooth eingeschaltet werden muss
233 }
234 }
235
236 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { //Wenn man auf ein Element auf der Liste klickt
237 // TODO Auto-generated method stub
238 Log.i(tag, "clickedItem");
239
240 String x = listview.getItemAtPosition(arg2).toString(); //das Element soll als String in eine variable gespeichert werden
241 String xr = x.substring(0, x.indexOf("|")); //der String wird bei "|" getrennt
242 String xc = x.substring(x.indexOf("|") + 1, x.length()); //der String wird nach dem "|" getrennt
243
244 tvName.setText(xr); //anzeigen des String in der Textview
245 tvAdresse.setText(xc);//anzeigen des String in der TextView
246
247
248 }
249
250
251
252
253
254
255}

ServerBluetooth
1package code.bluetoothkeyboard;
2
3import java.io.IOException;
4import java.util.UUID;
5
6import android.bluetooth.BluetoothAdapter;
7import android.bluetooth.BluetoothServerSocket;
8import android.bluetooth.BluetoothSocket;
9import android.os.Handler;
10import android.os.Message;
11import android.util.Log;
12
13//ab hier sind noch die Kommentaren vom Internet enthalten.
14 public class ServerBluetooth extends Thread {
15
16
17
18
19 BluetoothAdapter bAdapter;
20
21 public static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
22 private final BluetoothServerSocket mmServerSocket;
23 BluetoothServerSocket tmp = null; //neues objekt wird mit null erstellt
24 BluetoothSocket socket = null; // socket wird auf null gesetzt
25
26
27 public ServerBluetooth(BluetoothAdapter adapter) {
28 // Use a temporary object that is later assigned to mmSocket,
29 // because mmSocket is final
30 this.bAdapter = adapter;
31 //Der BluetoothSocket soll sich mit dem gewählten Bluetoothgerät verbinden
32 // Get a BluetoothSocket to connect with the given BluetoothDevice
33 try {
34 // MY_UUID is the app's UUID string, also used by the server
35 // code
36 this.tmp = bAdapter.listenUsingRfcommWithServiceRecord("Sender",
37 MY_UUID); //Der BluetoothSocket soll in das Objekt tmp abgelegt werden mit der UUID
38 } catch (IOException e) {
39 }
40 this.mmServerSocket = tmp; //das Objekt mmServerScoket soll den Inhalt von tmp übernehmen
41 }
42
43 public void run() { // der Thread wird gestartet
44
45 while (true) { //solange true
46 try {
47 socket = mmServerSocket.accept(); //wartet der Server auf eine eingehende Verbindung
48 } catch (IOException e) {
49 break;
50 }
51
52 if (socket != null) {//Sobald die Verbindung zum anderen Bluetoothgerät steht
53 manageConnectedSocket(socket);
54
55 try {
56 mmServerSocket.close(); //Soll die Verbindung geschlossen werden
57 } catch (IOException e) {
58 // TODO Auto-generated catch block
59 Log.i("ServerSocket Close", "Catch server Socket");
60 e.printStackTrace();
61 }
62
63 break;
64 }
65 }
66 }
67
68 public void manageConnectedSocket(BluetoothSocket socket) {
69 // TODO Auto-generated method stub
70
71 }
72
73 /** Will cancel an in-progress connection, and close the socket */
74 public void cancel() { //Methode um den SocketServer zu schliessen bzw. abzubrechen
75 try {
76 mmServerSocket.close();
77 } catch (IOException e) {
78 }
79 }
80 }

ClientBluetooth:
1package code.bluetoothkeyboard;
2
3import java.io.IOException;
4import java.util.UUID;
5
6import android.bluetooth.BluetoothAdapter;
7import android.bluetooth.BluetoothDevice;
8import android.bluetooth.BluetoothSocket;
9import android.os.Handler;
10import android.os.Message;
11
12//Ab hier liegt das Problem, warum er keine Verbindung aufbauen möchte, denke ich Mal. Das Logcat sagt genau das gleiche
13
14 public class ClientBluetooth extends Thread {
15
16 BluetoothSocket mmSocket = null;
17 BluetoothDevice mmDevice = null;
18 BluetoothAdapter btAdapter = null;
19
20 public static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
21 protected static final int SUCCESS_CONNECT = 0;
22 protected static final int MESSAGE_READ = 1;
23
24 Handler mHandler = new Handler() {
25 public void handleMessage(Message msg) { // Schnittstelle zwischen einem Thread
26 super.handleMessage(msg);
27 switch (msg.what) {
28 case SUCCESS_CONNECT: //Ist die Verbindung erfolgreich soll er eine Nachricht an das andere Gerät senden
29 dataBluetooth connectedthread = new dataBluetooth( //Starten der Datenübertragung durch erzeugen der Instanz
30 (BluetoothSocket) msg.obj);
31 String a = "erfolgreich Verbunden";
32 connectedthread.write(a.getBytes());// String a soll als Bytes gesendet werden
33 break;
34 case MESSAGE_READ: //Ansonsten soll er die Nachricht lesen, die er empfängt
35 }
36 }
37 };
38
39
40 public ClientBluetooth(BluetoothDevice device) {
41 // Use a temporary object that is later assigned to mmSocket,
42 // because mmSocket is final.
43
44
45 this.mmDevice = device;
46
47 // Get a BluetoothSocket to connect with the given BluetoothDevice.
48 try {
49 // MY_UUID is the app’s UUID string, also used by the server
50 // code.
51 this.mmSocket = device.createRfcommSocketToServiceRecord(UUID
52 .fromString("00001101-0000-1000-8000-00805F9B34FB"));
53 } catch (IOException e) {
54 }
55
56 }
57 public ClientBluetooth (BluetoothAdapter adapter) {
58
59 }
60
61
62 public void run() {
63 // Cancel discovery because it will slow down the connection.
64 btAdapter.cancelDiscovery();
65
66 try {
67 // Connect the device through the socket. This will block
68 // until it succeeds or throws an exception.
69 mmSocket.connect();
70 } catch (IOException connectException) {
71 // Unable to connect; close the socket and get out.
72 cancel();
73 return;
74 }
75 mHandler.obtainMessage(SUCCESS_CONNECT);
76
77 // Do work to manage the connection (in a separate thread).
78 manageConnectedSocket(mmSocket);
79 }
80
81 private void manageConnectedSocket(BluetoothSocket mmSocket2) {
82 // TODO Auto-generated method stub
83
84 }
85
86 /** Will cancel an in-progress connection, and close the socket. */
87 public void cancel() {
88 try {
89 mmSocket.close();
90 } catch (IOException e) {
91 }
92 }
93 }

dataBluetooth:
1package code.bluetoothkeyboard;
2
3import java.io.IOException;
4import java.io.InputStream;
5import java.io.OutputStream;
6
7import android.bluetooth.BluetoothSocket;
8import android.os.Handler;
9import android.os.Message;
10
11//developer android Internet
12 public class dataBluetooth extends Thread {
13
14
15 private final BluetoothSocket mmSocket;
16 private final InputStream mmInStream;
17 private final OutputStream mmOutStream;
18
19 protected static final int SUCCESS_CONNECT = 0;
20 protected static final int MESSAGE_READ = 1;
21
22 byte[] buffer; // buffer store for the stream
23 int bytes;
24
25 Handler mHandler;
26
27 public dataBluetooth(BluetoothSocket socket) {
28 mmSocket = socket;
29 InputStream tmpIn = null;
30 OutputStream tmpOut = null;
31
32 // Get the input and output streams, using temp objects because
33 // member streams are final
34 try {
35 tmpIn = socket.getInputStream();
36 tmpOut = socket.getOutputStream();
37 } catch (IOException e) {
38 }
39
40 mmInStream = tmpIn;
41 mmOutStream = tmpOut;
42 }
43
44 public void run() {
45 // bytes returned from read()
46
47 // Keep listening to the InputStream until an exception occurs
48 while (true) {
49 try {
50
51 buffer = new byte[1024];
52 // Read from the InputStream
53 bytes = mmInStream.read(buffer);
54 // Send the obtained bytes to the UI activity
55 mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
56 .sendToTarget();
57 } catch (IOException e) {
58 break;
59 }
60 }
61 }
62
63 /* Call this from the main activity to send data to the remote device */
64 public void write(byte[] bytes) {
65 try {
66 mmOutStream.write(bytes);
67 } catch (IOException e) {
68 }
69 }
70
71 /* Call this from the main activity to shutdown the connection */
72 public void cancel() {
73 try {
74 mmSocket.close();
75 } catch (IOException e) {
76 }
77 }
78 }

Logcat
1



Bitte um Hilfe!!

— geändert am 14.12.2012, 23:09:58

Antworten
Lukinator
  • Forum-Beiträge: 2.519

06.12.2012, 22:40:27 via App

Wenn du damit fertig bist melde doch,suche sowas dringend.

Challenger me von Quizduell : yolopolooreo
(Schreibt mir dann da auch euren AndroidPIT Namen :D )

Antworten
Andre M.
  • Forum-Beiträge: 101

06.12.2012, 22:43:56 via App

Vorab - ich hab keine Ahnung von programmieren (mit Android). Aber: Genau so eine App habe ich auch schon gesucht. Das einzige, was ich im PlayStore finde, ist nur für gerootete Geräte. Ich kann nur spekulieren, dass die PS3 irgendeine sehr spezielle Schnittstelle (oder Protokoll oder Ähnliches) hat?!

— geändert am 06.12.2012, 22:44:34

Antworten
Celebration
  • Forum-Beiträge: 8

06.12.2012, 23:37:49 via Website

Es ist schön zu hören, dass ihr an meiner App interessiert seid. Damit ihr bescheid wisst, die App muss bis nächsten Freitag funktionsfähig sein inkl Dokumentation. Ihr könnt euch ja schon Mal darauf freuen :P

Nur helfen mir eure Kommentare nicht, ausser das mein Topic schön oben bleibt, damit jeder es sehen kann. :)

Falls ihr mir helfen möchtet, könnt ihr mir gerne helfen indem ihr mir Links per PN mit verschiedenen Lösungsansätze schickt.

Antworten
Celebration
  • Forum-Beiträge: 8

09.12.2012, 13:24:59 via Website

Hey Leute, ich brauche dringend eure Hilfe! Ich bin am verzweifeln :(
Nachdem Bluetooth eingeschaltet wird, stürzt meine App ab.

Hab den aktuellen Code oben eingefügt. Bitte ich brauche Hilfe :( :(

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

09.12.2012, 13:28:51 via App

Was sagt denn das Logcat?

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Celebration
  • Forum-Beiträge: 8

09.12.2012, 21:31:25 via Website

Also hab mein Code oben wieder aktualisiert.

In der Logcat bekomme ich die Meldung, dass mein BroadcastReceiver nicht registriert wurde, nehme ich Mal an.

1E/AndroidRuntime(13318): java.lang.RuntimeException: Unable to pause activity {com.example.keyboard/com.example.keyboard.MainActivtiy} : java.lang.IllegalArgumentException: Receiver not registered: com.example.keyboard.MainActivity$3@482d5420
2E/AndroidRuntime(13318): Caused by java.lang.IllegalArgumentException: Receiver not registered: com.example.keyboard.MainActivity$3@482d5420
3E/AndroidRuntime(13318): at com.example.keyboard.MainActivtiy.onPause(MainActivity.java:162)

Habe noch Probleme mit dem anzeigen der ListView, die eigentlich gefüllt sein müsste mit den Elementen von der ArrayList. Aber das will irgendwie auch nicht so richtig :(

Hoffe das helft dir weiter :)

Grüsse

— geändert am 09.12.2012, 21:38:03

Antworten
Felix T.
  • Forum-Beiträge: 65

09.12.2012, 21:39:56 via App

Oh :-/

— geändert am 06.01.2015, 17:22:59

Antworten
Celebration
  • Forum-Beiträge: 8

11.12.2012, 18:27:35 via Website

Hab mal den neuen Code hochgeladen. Mein Problem ist, dass er mir die Bluetoothgeräte in der Umgebung nicht sucht bzw. diese nacht anzeigt, in der ListView.
Der "Scannen" Button sollte ebenfalls nach Bluetoothgeräten suchen, aber er will nicht. Er zeigt mir nach dem Klicken, eine leere ListView an.

Antworten
Celebration
  • Forum-Beiträge: 8

14.12.2012, 23:06:04 via Website

Abend, mein Programm will nicht mehr starten. Der Code ist oben neu eingefügt. Das Programm lässt sich nicht einmal installieren

Update:
Ok startet wieder, aber bekomme einen NullPointer Exception
Logcat:
112-14 22:07:00.762: E/AndroidRuntime(388): FATAL EXCEPTION: main
212-14 22:07:00.762: E/AndroidRuntime(388): java.lang.RuntimeException: Unable to start activity ComponentInfo{code.bluetoothkeyboard/code.bluetoothkeyboard.StartActivity}: java.lang.NullPointerException
312-14 22:07:00.762: E/AndroidRuntime(388): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
412-14 22:07:00.762: E/AndroidRuntime(388): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
512-14 22:07:00.762: E/AndroidRuntime(388): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
612-14 22:07:00.762: E/AndroidRuntime(388): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
712-14 22:07:00.762: E/AndroidRuntime(388): at android.os.Handler.dispatchMessage(Handler.java:99)
812-14 22:07:00.762: E/AndroidRuntime(388): at android.os.Looper.loop(Looper.java:123)
912-14 22:07:00.762: E/AndroidRuntime(388): at android.app.ActivityThread.main(ActivityThread.java:4627)
1012-14 22:07:00.762: E/AndroidRuntime(388): at java.lang.reflect.Method.invokeNative(Native Method)
1112-14 22:07:00.762: E/AndroidRuntime(388): at java.lang.reflect.Method.invoke(Method.java:521)
1212-14 22:07:00.762: E/AndroidRuntime(388): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
1312-14 22:07:00.762: E/AndroidRuntime(388): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
1412-14 22:07:00.762: E/AndroidRuntime(388): at dalvik.system.NativeStart.main(Native Method)
1512-14 22:07:00.762: E/AndroidRuntime(388): Caused by: java.lang.NullPointerException
1612-14 22:07:00.762: E/AndroidRuntime(388): at code.bluetoothkeyboard.ServerBluetooth.<init>(ServerBluetooth.java:36)
1712-14 22:07:00.762: E/AndroidRuntime(388): at code.bluetoothkeyboard.StartActivity.init(StartActivity.java:133)
1812-14 22:07:00.762: E/AndroidRuntime(388): at code.bluetoothkeyboard.StartActivity.onCreate(StartActivity.java:60)
1912-14 22:07:00.762: E/AndroidRuntime(388): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
2012-14 22:07:00.762: E/AndroidRuntime(388): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
2112-14 22:07:00.762: E/AndroidRuntime(388): ... 11 more

— geändert am 14.12.2012, 23:09:25

Antworten
Christian
  • Forum-Beiträge: 307

15.12.2012, 11:01:40 via Website

Hi Celebration,

wenn du eine Instanze von "ServerBluetooth" erstellst ist "btAdapter" noch null,

in der init():
1//wird btAdapter genutzt um eine Instanze von ServerBluetooth zu erstellen
2sb = new ServerBluetooth(btAdapter);

3verbinden = (Button) findViewById(R.id.verbinden);
4scannen = (Button) findViewById(R.id.scannen);
5
6tvName = (TextView) findViewById(R.id.btName);
7tvAdresse = (TextView) findViewById(R.id.btAdress);
8
9//hier bekommt aber btAdapter erst einen Wert
10btAdapter = BluetoothAdapter.getDefaultAdapter();


Soll das so sein?

ähm dein Konstruktor von ServerBluetooth sieht irgenwie komisch aus
1public ServerBluetooth(BluetoothAdapter adapter) {
2 //wird die Variable bAdapter noch mal in der Klasse gebraucht?
3 this.bAdapter = adapter;
4
5 try {
6 //Warum wird das ganze in tmp zwischen gespeichert?
7 this.tmp = bAdapter.listenUsingRfcommWithServiceRecord("Sender", MY_UUID);
8 } catch (IOException e) {
9 //wenn du eine Exception abfängst dann solltest du dir auch den Stacktrace ausgeben
10 }
11
12 //wenn die Exception geworfen wird ist .mmServerSocket auf jedenfall null ist das gewollt?
13 this.mmServerSocket = tmp;
14}

und noch was in der Run Methode
1public void run() { // der Thread wird gestartet
2
3 //warum prüfst du nicht erst ob mmServerSocket null ist bevor du in die Schleife gehst?
4 while (true) { //solange true
5 try {
6 socket = mmServerSocket.accept(); //wartet der Server auf eine eingehende Verbindung
7 } catch (IOException e) {
8 break;
9 }
10 .......
11 }

Ob diese Sachen jetzt deinen Fehler lösen, kann ich dir nicht sagen. Sie sind mir nur aufgefallen als ich mir den Code angesehen hab.

Mfg Christian

P.s Falls das hier einer der AndroidPit Verantwortlichen liest BITTE BITTE BITTE BITTE schaft endlich eine Möglichkeit um Code in einer ordentlichen Form darzustellen

— geändert am 15.12.2012, 11:06:28

impjorCelebration

Antworten