首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

activity跳转时会黑屏,模拟器能显示程序无响应

2013-07-16 
activity跳转时会黑屏,模拟器会显示程序无响应我的问题是这样的:我要开发一个即时通讯的软件,大概像qq的聊

activity跳转时会黑屏,模拟器会显示程序无响应
我的问题是这样的:我要开发一个即时通讯的软件,大概像qq的聊天功能,大体思路是客户Client A将信息包装起来发给服务器,然后服务器根据A发过来的包解析出要传递给的目标者Client B,然后服务器继续将包发送给Client B,服务器接收功能我已

经写好了,只是在B接收服务器时出现了一个小问题,我想让B使用ObjectInputStream不断地接收服务器发过来的信息,然后显示在B的一个对话Activity中的EditText中,但是我

在这个对话Activity的onCreate方法中new一个ObjectInputStream,并让它执行readObject的话,模拟器在跳转到这个Activity时会黑屏,并显示失去响应。我想可能在onCreate

方法中不能让ObjectInputStream执行readObject,于是把new ObjectInputStream和readObject放到按钮的点击事件处理中去,可这样的话就只能点击一次接收一次,不点击按钮

就无法得到服务器发来的信息,各位大侠该怎么解决?
B的对话Activity代码如下
package cn.jiaoyuan.hmx;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.StreamCorruptedException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class haoyouliaotian extends Activity {
Button bt_fasong;
EditText et_xiaoxi;
String daifadong;
ObjectOutputStream objout;
ObjectInputStream objin;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.zhidinghaoyouliaotian);
bt_fasong = (Button) findViewById(R.id.btn_fasong);
et_xiaoxi = (EditText) findViewById(R.id.et_daifadong);

bt_fasong.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
daifadong = et_xiaoxi.getText().toString();
YQMessage message = new YQMessage();
message.setContent(daifadong);
message.setType(YQMessageType.COM_MES);
message.setSender(MainActivity.myaccount);
message.setReceiver(haoyouliebiao.haoyouaccount);
try {
objout=new ObjectOutputStream(YQClient.s.getOutputStream());
objout.writeObject(message);
objin=new ObjectInputStream(YQClient.s.getInputStream());
YQMessage shouxino = (YQMessage) objin.readObject();
Toast.makeText(getApplicationContext(),
shouxino.getContent(), Toast.LENGTH_LONG).show();

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});

}

}




分享到:
[解决办法]
你不能再主线程中做接受数据的,主线程应该只做UI和短时间的数据处理的,应该用handler处理返回数据的
[解决办法]
不要在主线程中接收数据,

try {
 objout=new ObjectOutputStream(YQClient.s.getOutputStream());
 objout.writeObject(message);
 objin=new ObjectInputStream(YQClient.s.getInputStream());
 YQMessage shouxino = (YQMessage) objin.readObject();
 Toast.makeText(getApplicationContext(),
 shouxino.getContent(), Toast.LENGTH_LONG).show();
 
} catch (Exception e) {}
然后通过handler发送给主线程刷新

热点排行