我是Android新手,想知道是否有人可以帮助我,这就是我的代码。
import java.io.*;
import java.net.*;
import android.app.*;
import android.util.Log;
import android.os.*;
import android.view.*;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try
{
Socket TestSocket = new Socket("96.29.64.93",2215);
OutputStream writer = TestSocket.getOutputStream();
writer.write(new byte[]{1});
writer.flush();
InputStream reader = TestSocket.getInputStream();
byte array[] = new byte[1];
int i = reader.read(array);
}catch(IOException ex)
{
Log.e("TcpTest","Error",ex);
}
}
}
编辑: manifest app force中设置的Internet权限在这里关闭是logcat。 http://i43.tinypic.com/25tc1o7.png
如果我取消互联网权限,则不会强制关闭。
感谢迄今为止所有发布的答案。
答案 0 :(得分:1)
您正在尝试在UI线程上建立连接,并且ICS正在崩溃您的应用程序(因为它应该,因为尝试连接到UI线程上的Web服务器几乎可以肯定是您的应用程序无法正常运行) 。确保使用AsyncTask
或Thread
建立连接。
你要求澄清一下,所以在这里。来自开发者网站上的Android article:
启动应用程序时,系统会创建一个名为的线程 申请的“主要”。主线程,也称为UI 线程,非常重要,因为它负责调度 事件到适当的小部件,包括绘图事件。它是 也是应用程序与运行交互的线程 Android UI工具包的组件。
例如,如果您触摸屏幕上的a按钮,则会显示UI线程 将触摸事件调度到窗口小部件,窗口小部件又设置它 按下状态并向事件队列发布无效请求。该 UI线程将请求出列并通知窗口小部件重绘 本身。
这种单线程模型可能会导致性能不佳,除非你的 应用程序正确实施。具体来说,如果一切都是 发生在一个线程中,执行诸如的长操作 UI线程上的网络访问或数据库查询将阻止 整个用户界面。不能发送任何事件,包括绘图 事件,而长期运作正在进行中。来自用户的 透视,应用程序显示挂起。更糟糕的是,如果用户界面 线程被阻止超过几秒钟(约5秒钟) 目前,用户被提出臭名昭着的“应用程序没有 响应“(ANR)对话框。
这适用于您的情况,因为尝试在客户端和服务器之间建立套接字连接将阻止 UI线程 - 用户将无法与屏幕进行交互,直到建立连接(这不会让你在Android Market中得到太多好评:P)。因此,在单独的线程上执行潜在的昂贵/长期操作非常重要。最简单的方法是使用AsyncTask
,它非常容易实现,并且基本上抽象了Thread
的整个概念,因此您不必担心它。
答案 1 :(得分:0)
如果您将setContentView
移到try
声明之上,该怎么办?