Android 传递对象流使用意图方法

Android 传递对象流使用意图方法,android,Android,如果我使用像这样的意图方法,我如何将对象流(例如:BufferedReader或DataOutputStream n等)传递给其他活动(从Client\u layoutActivity.class到chat\u wall.class): Intent i = new Intent(Client_layoutActivity.this, chat_wall.class); startActivity(i); 我制作了一个由几个页面组成的聊天应用程序第一页是登录页。

如果我使用像这样的意图方法,我如何将对象流(例如:BufferedReader或DataOutputStream n等)传递给其他活动(从Client\u layoutActivity.class到chat\u wall.class)

        Intent i = new Intent(Client_layoutActivity.this, chat_wall.class);
        startActivity(i);
我制作了一个由几个页面组成的聊天应用程序第一页是登录页。在第一页中,客户端使用套接字与服务器进行通信登录过程成功后,服务器将发送“登录成功”之后,客户端会将布局从第一页(登录页)更改为第二页(聊天墙页)我的意思是从第一页开始使用socket、BufferedReader和DataOutStream方法(我假设登录过程的socket仍然连接,所以我仍然可以在第二页-聊天过程中使用此socket进行通信)。所以我想将对象套接字、BufferedReader和DataOutStream传递到第二个页面来使用它。我在下面编写代码:

第1页:用于登录

public void login(){
    try {
    String name     = usrname.getText().toString(); // usrname is android object edit 
                                                       text 
    String pass     = password.getText().toString();// password is android   
                                                               object edit text 

    String sending  = "login."+name + "." + pass + "." +"\n";
     System.out.println("Sending Message: "+sending);

    Socket clientsock = new Socket("192.168.136.6", 28000);
    System.out.println("connect to the server...");

    BufferedReader in    = new BufferedReader(new  
    InputStreamReader(clientsock.getInputStream()));
    DataOutputStream out = new DataOutputStream(clientsock.getOutputStream());

    out.writeBytes(sending);    

    String line = in.readLine();

    if (line.contentEquals("login success")){
        Toast.makeText(this, "login success", Toast.LENGTH_SHORT).show();
        Toast.makeText(this, "receive data from 
    server:"+clientsock.getInetAddress(), Toast.LENGTH_SHORT).show();
        Intent i = new Intent(Client_layoutActivity.this, chat_wall.class);
        startActivity(i); 

    } else {
        Toast.makeText(this, "Error ", Toast.LENGTH_SHORT).show();
    }


}
catch (Exception e)
{
    System.out.println(e);
    System.out.println("Connection Failed");
}
package com.willis.layout;

import java.io.*;
import java.net.*;

import android.widget.*;
import android.os.Bundle;
import android.view.*;
import android.view.View.OnClickListener;
import android.app.Activity;
import android.R.integer;

 public class chat_wall extends Activity {

Client_layoutActivity ob;   
public EditText chatroom;    
   public Button sendbtn;

 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.chatwall);       

  sendbtn = (Button)findViewById(R.id.sendmsg);
  sendbtn.setOnClickListener(new OnClickListener() {
      public void onClick(View view) {                  

              sendingmsg();                                         
          }
      });

 chatroom = (EditText)findViewById(R.id.chatroom);     

 }   

 public void sendingmsg (){    

   try
    {   


        BufferedReader in    = new BufferedReader(new 
            InputStreamReader(clientsock.getInputStream()));
        DataOutputStream out = new DataOutputStream(clientsock.getOutputStream());

    String name     = chatroom.getText().toString();            
    String send = "chat."+name+". \n";

        System.out.println("Sending message: "+send);
        out.writeBytes(send);

        String msgin = in.readLine();
        Toast.makeText(this, msgin, Toast.LENGTH_SHORT).show();

    }
    catch (Exception e)
    {
        System.out.println(e);
        System.out.println("Connection Failed");
    }
    }

     }
第2页:用于聊天

public void login(){
    try {
    String name     = usrname.getText().toString(); // usrname is android object edit 
                                                       text 
    String pass     = password.getText().toString();// password is android   
                                                               object edit text 

    String sending  = "login."+name + "." + pass + "." +"\n";
     System.out.println("Sending Message: "+sending);

    Socket clientsock = new Socket("192.168.136.6", 28000);
    System.out.println("connect to the server...");

    BufferedReader in    = new BufferedReader(new  
    InputStreamReader(clientsock.getInputStream()));
    DataOutputStream out = new DataOutputStream(clientsock.getOutputStream());

    out.writeBytes(sending);    

    String line = in.readLine();

    if (line.contentEquals("login success")){
        Toast.makeText(this, "login success", Toast.LENGTH_SHORT).show();
        Toast.makeText(this, "receive data from 
    server:"+clientsock.getInetAddress(), Toast.LENGTH_SHORT).show();
        Intent i = new Intent(Client_layoutActivity.this, chat_wall.class);
        startActivity(i); 

    } else {
        Toast.makeText(this, "Error ", Toast.LENGTH_SHORT).show();
    }


}
catch (Exception e)
{
    System.out.println(e);
    System.out.println("Connection Failed");
}
package com.willis.layout;

import java.io.*;
import java.net.*;

import android.widget.*;
import android.os.Bundle;
import android.view.*;
import android.view.View.OnClickListener;
import android.app.Activity;
import android.R.integer;

 public class chat_wall extends Activity {

Client_layoutActivity ob;   
public EditText chatroom;    
   public Button sendbtn;

 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.chatwall);       

  sendbtn = (Button)findViewById(R.id.sendmsg);
  sendbtn.setOnClickListener(new OnClickListener() {
      public void onClick(View view) {                  

              sendingmsg();                                         
          }
      });

 chatroom = (EditText)findViewById(R.id.chatroom);     

 }   

 public void sendingmsg (){    

   try
    {   


        BufferedReader in    = new BufferedReader(new 
            InputStreamReader(clientsock.getInputStream()));
        DataOutputStream out = new DataOutputStream(clientsock.getOutputStream());

    String name     = chatroom.getText().toString();            
    String send = "chat."+name+". \n";

        System.out.println("Sending message: "+send);
        out.writeBytes(send);

        String msgin = in.readLine();
        Toast.makeText(this, msgin, Toast.LENGTH_SHORT).show();

    }
    catch (Exception e)
    {
        System.out.println(e);
        System.out.println("Connection Failed");
    }
    }

     }

据我所知,您想要的是使用相同的套接字进行登录和聊天。不要在活动之间发送<代码>套接字<代码>对象>代码>意图< /代码>考虑另一个选项:

  • 定义一个类来管理打开的套接字,并创建其静态实例或使其成为单例
  • 使用本地
    服务
    ,如中所述。在其中定义您的
    sendingsg
    login
    方法,并在其
    onResume
    上绑定
    Activity

    private ChatService mService;
    ...
    @Override
    protected void onResume() {
        doBindService();
        sendbtn.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                mService.sendingmsg();
            }
        });
    }
    
    @Override
    protected void onPause() {
        doUnbindService();
    }
    

  • 试试看你不能使用意图。你能告诉我们你试图对对象流做什么吗(为什么它从一个活动转到下一个活动?@L7ColWinters:我在上面写过,谢谢套接字应该在异步任务中,并考虑使用处理程序接收消息和登录成功。