在activit-main的onCreate中,我在XMMPPConnection的構造函數中創建了一個名爲XMPPConectio的類的入口,我取得了活動主的屬性並執行一個Asychtask。在progressUpdate中我調用activity-main的triger函數。我的TRIGER功能我想給XMPPconnectio的inistance由intent.putExtra其他活動,但我得到的錯誤當將一個對象的實例發送給其他活動時,可Parcelable遇到IOException
Parcelable遇到IOException異常寫序列化對象
做這些的目的是爲了有連接(連接時)到其他活動。
請給我一些示例代碼謝謝
其實現Serializable XMPPConectio類:
public class XMPPConnectio implements Serializable {
XMPPTCPConnection connection;
String connectionMessages="";
connectionXMPP connectionXMPPAsynch;
MainActivity mainActivity;
public XMPPTCPConnection getXMPPConnectio()
{
return connection;
}
public XMPPConnectio(MainActivity mainActivity)
{
this.mainActivity=mainActivity;
try
{
connectionXMPPAsynch =new connectionXMPP();
connectionXMPPAsynch.execute();
}
catch (Exception e)
{
}
}
class connectionXMPP extends AsyncTask<String,Void,String>
{
@Override
protected String doInBackground(String... params) {
connection = new XMPPTCPConnection(XMPPTCPConnectionConfiguration.builder()
.setServiceName("192.168.1.6")
.setUsernameAndPassword("ehsan", "123")
.setPort(9090)
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.setDebuggerEnabled(true)
.setCompressionEnabled(false).build());
connection.setUseStreamManagement(true);
connection.addConnectionListener(new ConnectionListener()
{
@Override
public void connected(XMPPConnection connection) {
Log.d("connected", "yes connected successfully : ");
publishProgress();
}
@Override
public void authenticated(XMPPConnection connection, boolean resumed) {
Log.d("connected","yes authenticated successfully : ");
}
@Override
public void connectionClosed() {
Log.d("connected","yes connectionClosed successfully : ");
}
@Override
public void connectionClosedOnError(Exception e) {
Log.d("connected","yes connectionClosedOnError : ");
}
@Override
public void reconnectionSuccessful() {
Log.d("connected","yes reconnection successfully : ");
}
@Override
public void reconnectingIn(int seconds) {
Log.d("connected","yes reconnectingIn : ");
}
@Override
public void reconnectionFailed(Exception e) {
Log.d("connected","yes reconnectionFailed : ");
}
});
connect();
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
mainActivity.triger();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Log.d("","onPostExecute");
}
private void connect()
{
try {
connection.connect();
} catch (SmackException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XMPPException e) {
e.printStackTrace();
}
}
}
}
的活動,這使得XMPPConectio的實例,並引起Asychtask執行
package passargad.ehsan;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Serializable;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.net.Socket;
public class MainActivity extends ActionBarActivity implements Serializable {
private Socket socket;
private String serverIpAddress = "192.168.1.6";
XMPPConnectio xmppConnectio;
XMPPTCPConnection connection;
private static final int REDIRECTED_SERVERPORT = 6789;
FastFood fastFood;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent=new Intent(this,SocketService.class);
startService(intent);
fastFood =new FastFood(this);
xmppConnectio=new XMPPConnectio(this);
}
// this is the function which is called (when connection is done) by //onProgressUpdate of Asychtask
public void triger()
{
try {
Intent intent= new Intent(this,chat.class);
intent.putExtra("XMPP",xmppConnectio);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
}
這就是我想有XMPPConnectio在那裏活動,但執行永遠達不到這個
package passargad.ehsan;
import android.app.Application;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import java.io.IOException;
public class chat extends ActionBarActivity {
XMPPConnectio xmppConnectio;
XMPPTCPConnection connection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
xmppConnectio=(XMPPConnectio)getIntent().getSerializableExtra("XMPP");
Log.d("","done");
}
}
我試圖使這個問題晶瑩剔透通過給所有的代碼。正如我所說的,目標是在連接連接時在所有活動中建立連接。 謝謝。