android - 应用程序在 3.0 中崩溃,但在 2.3.3 中运行良好

标签 android sockets android-3.0-honeycomb

大家好,我正在尝试创建一个使用套接字连接的应用程序,我正在查看一些示例,下面的代码在 2.3.3 上运行时工作正常,在 3.0 中运行时同样崩溃。

package com.simple.client;

import android.app.Activity;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.os.Bundle;

public class SimpleClientActivity extends Activity {
EditText textOut;
TextView textIn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    textOut = (EditText)findViewById(R.id.textout);
    Button buttonSend = (Button)findViewById(R.id.send);
    textIn = (TextView)findViewById(R.id.textin);
    buttonSend.setOnClickListener(buttonSendOnClickListener);
}

Button.OnClickListener buttonSendOnClickListener
= new Button.OnClickListener(){

public void onClick(View arg0) {
// TODO Auto-generated method stub
Socket socket = null;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;

try {
 socket = new Socket("172.16.2.172", 8899);
 dataOutputStream = new DataOutputStream(socket.getOutputStream());
 dataInputStream = new DataInputStream(socket.getInputStream());
 dataOutputStream.writeUTF(textOut.getText().toString());
 textIn.setText(dataInputStream.readUTF());
} catch (UnknownHostException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
} catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 e.printStackTrace();
}
finally{
 if (socket != null){
  try {
   socket.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

 if (dataOutputStream != null){
  try {
   dataOutputStream.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

 if (dataInputStream != null){
  try {
   dataInputStream.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   }
  }
 }
}};
}

我已经尝试了所有方法,但无法弄清楚发生了什么,

最佳答案

我的猜测是,StrictMode.ThreadPolicy引起的错误。在android 3.0中,你不能在同一个UI线程中访问网络。

关于android - 应用程序在 3.0 中崩溃,但在 2.3.3 中运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10814393/

相关文章:

android - 使用 Timer 从 android 做 http 请求

java - 在不同组中选择的抽屉导航菜单项

javascript - NodeJS 套接字数据拆分

c - 使用 sendfile 而不是 sendto 的零复制 udp 套接字

android - 如何开发安卓固件?

java - hive XML 解析错误

java - 我想从图库中选择多个图像,但是选择图像后,当我单击“打开”时崩溃

python - 套接字碎片接收数据

android - 在 Android 蜂窝操作系统中,我可以将状态栏移动到顶部吗?

android - 以编程方式自定义 SearchView