Ho bisogno del vostro aiuto ragazzi. Ho delle activity che comunicano tra loro, o meglio ho un'activity principale che ne lancia una secondaria,che a sua volta ne lancia un'altra e cosi via. Il problema è che la principale apre una socket con un server e crea dei buffer di lettura e scrittura. Le altre che vengono lanciate successivamente devono andare a scrivere su questi buffer. Estendendo le altre activity come figlie della principale non risolvo il problema. Ho provato allora a creare un intent ed ad aggiungervi degli extra del tipo:
Intent intent = new Intent(getApplicationContext(), Activity2.class);
String pkg=getPackageName();
intent.putExtra(pkg+".mySocket", socket);
intent.putExtra(pkg+".myWriter", writer);
intent.putExtra(pkg+".myReader", reader);
startActivity(i);
dove però socket,writer e reader sono classi "taroccate" che estendono Serializable (ho letto che per passare un oggetto di tipo non primitivo bisogna per forza implementare l'interfaccia):
public class NewSocket extends Socket implements Serializable {
public NewSocket(InetAddress ip, int port) throws IOException {
super(ip,port);
}
}
public class NewPrintWriter extends PrintWriter implements Serializable {
public NewPrintWriter(BufferedWriter out, boolean bool) {
super(out, bool);
}
}
public class NewBufferedReader extends BufferedReader implements Serializable {
public NewBufferedReader(Reader in) {
super(in);
}
}
creo il socket e i buffer in questo modo:
socket = new NewSocket(ipAddress,port);
reader = new NewBufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new NewPrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true );
ma compariva l'errore:
...java.lang.RuntimeException: Parcelable encountered IOException reading a Serializable object (name = package.mio.NewBufferedReader)..
Ho provato infine a salvarli in un Bundle:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putSerializable("Socket", socket);
savedInstanceState.putSerializable("Writer", writer);
savedInstanceState.putSerializable("Reader", reader);
super.onSaveInstanceState(savedInstanceState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
socket = (NewSocket) savedInstanceState.getSerializable("Socket");
writer = (NewPrintWriter) savedInstanceState.getSerializable("Writer");
reader = (NewBufferedReader) savedInstanceState.getSerializable("Reader");
}
..ma niente da fare:
java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = package.mio.NewPrintWriter)..
Non so proprio che pesci pigliare
Qualcuno riesce a darmi una mano?? Grazie.