0
好的我正在为一些蓝牙作品制作应用程序,所以有线程类,我用它与其他设备连接,现在我想将该线程类实例传递给另一个活动,所以我不必重新连接它,因此我实现该线程类作为Parcelable但它不工作,并抛出空指针异常。如何将线程类对象从活动传递到使用parcelable的活动
这里是threa类ClientThread.java: -
public class ClientThread extends Thread implements Runnable,Parcelable {
private BluetoothDevice device;
private final BluetoothSocket socket;
private Context context;
private BluetoothAdapter adapter;
private static String address = "14:36:05:7B:39:9B";//"98:D3:31:60:06:CA";
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private Handler handle;
protected InputStream is = null;
protected OutputStream os = null;
private boolean first;
private String password;
public ClientThread(Context context, Handler handle, String pass, boolean check) {
this.context = context;
adapter = BluetoothAdapter.getDefaultAdapter();
this.password = pass;
this.handle = handle;
this.first = check;
BluetoothSocket tmpSocket = null;
try {
device = adapter.getRemoteDevice(address);
tmpSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
socket = tmpSocket;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
adapter.cancelDiscovery();
socket.connect();
handle.sendEmptyMessage(2);
dataTransfer(socket);
} catch (IOException e) {
// TODO Auto-generated catch block
handle.sendEmptyMessage(3);
e.printStackTrace();
try {
socket.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
private boolean listen = true;
public void dataTransfer(BluetoothSocket soc) throws IOException {
is = soc.getInputStream();
os = soc.getOutputStream();
byte[] buffer = new byte[256];
int bytes;
if (first) {
send(("Validate" + password).getBytes());
first = false;
}
while (listen) {
try {
bytes = is.read(buffer);
handle.obtainMessage(1, bytes, -1, buffer).sendToTarget();
// final String data = new String(buffer, 0, bytes);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void send(byte[] buffer) {
try {
os.write(buffer);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void cancel() {
try {
listen = false;
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
int mData=0;
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
}
public static final Parcelable.Creator<ClientThread> CREATOR = new Parcelable.Creator<ClientThread>() {
public ClientThread createFromParcel(Parcel in) {
return new ClientThread(in);
}
public ClientThread[] newArray(int size) {
return new ClientThread[size];
}
};
// example constructor that takes a Parcel and gives you an object populated with it's values
private ClientThread(Parcel in) {
mData = in.readInt();
socket=null;
}
}
请帮助我如何正确地使它parcelable,这样我可以传递的B/W活动
OK,你可以展示如何实现这一目标的活动或任何referel环节所拥有 –