Java 代码在旧项目中工作,不';新项目中的t

Java 代码在旧项目中工作,不';新项目中的t,java,android,sockets,Java,Android,Sockets,我有一个去年5月左右的老项目,它的工作原理与预期的一样,但是当我将代码复制/粘贴到一个新项目中时,它抛出了一个异常。所讨论的代码是一个简单的TCP/IP客户端 粘贴到新项目时,会引发NPE异常: com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: Thread-5 Process: com.example.myapplication, PID: 32308 java.lang.NullPointerException: At

我有一个去年5月左右的老项目,它的工作原理与预期的一样,但是当我将代码复制/粘贴到一个新项目中时,它抛出了一个异常。所讨论的代码是一个简单的TCP/IP客户端

粘贴到新项目时,会引发NPE异常:

com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: Thread-5 
Process: com.example.myapplication, PID: 32308
java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.DataOutputStream.writeBytes(java.lang.String)' on a null object reference
    at com.example.myapplication.MainActivity$sendMessage.run(MainActivity.java:212)
    at java.lang.Thread.run(Thread.java:761)
我试图寻找关于Socket NPE的答案,但我找不到任何与我相关的答案,因为这段代码在较旧的项目中运行时一直(现在)有效

我使用了Studios调试器,正如人们所期望的那样,显示了“socket=null”。下面是“try”块中带有“catch”的套接字的初始化:

inetAddressServerAddr=InetAddress.getByName(serverIpAddress);
套接字=新套接字(serverAddr,502);
os=新的DataOutputStream(socket.getOutputStream());
in=新的BufferedReader(新的InputStreamReader(socket.getInputStream());
完整代码:

public类MainActivity扩展了AppCompatActivity
{
公共编辑文本服务器IP,smessage;
公共文本视图聊天,值0,值1,值2,值3;
公用按钮连接电话、断开电话、发送;
公共字符串serverIpAddress=“”,msg=“”,msg1=“”,str=“”;
公共字符串substrVALUE,substrMSG=“”;
public Handler=new Handler();
公共插座;
公共数据输出流;
公共缓冲区中的读卡器;
公共int i,ID,TYPE;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
serverIp=(EditText)findViewById(R.id.server\u ip);
smessage=(EditText)findViewById(R.id.smessage);
chat=(TextView)findViewById(R.id.chat);
VALUE0=(TextView)findViewById(R.id.VALUE0);
VALUE1=(TextView)findViewById(R.id.VALUE1);
VALUE2=(TextView)findViewById(R.id.VALUE2);
VALUE3=(TextView)findViewById(R.id.VALUE3);
send=(按钮)findviewbyd(R.id.send_按钮);
connectPhones=(按钮)findViewById(R.id.connectPhones);
disconnectPhones=(按钮)findViewById(R.id.disconnectPhones);
connectPhones.setEnabled(true);
断开手机连接。设置已启用(错误);
send.setEnabled(false);
connectPhones.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
connectPhones.setEnabled(假);
断开手机连接。设置已启用(true);
send.setEnabled(true);
serverIpAddress=serverIp.getText().toString();
str=“”;
如果(!serverIpAddress.equals(“”)
{
线程clientThread=新线程(newclientthread());
clientThread.start();
}
}
});
send.setOnClickListener(新视图.OnClickListener()
{
公共void onClick(视图v)
{
Thread sendThread=新线程(new sendMessage());
sendThread.start();
}
});
disconnectPhones.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
connectPhones.setEnabled(true);
断开手机连接。设置已启用(错误);
send.setEnabled(false);
尝试
{
socket.close();
handler.post(新的Runnable(){
@凌驾
公开募捐{
chat.setText(“”);
str=“”;
}
});
}
捕获(IOE异常)
{
}
str=“”;
msg=“”;
}
});
}
公共类ClientThread实现可运行
{
公开募捐
{
尝试
{
InetAddress serverAddr=InetAddress.getByName(serverIpAddress);
套接字=新套接字(serverAddr,502);
os=新的DataOutputStream(socket.getOutputStream());
in=新的BufferedReader(新的InputStreamReader(socket.getInputStream());
while(true){
字符串行=null;
而((line=in.readLine())!=null)
{
msg1=直线;
substrMSG=msg1.toString();
//if(substrMSG.substring(0,1).matches(“S”))
//{
i=0;
而(i

我必须更改什么才能使其正常工作?

正如EpicPandaForce评论的那样,我忘记设置正确的权限。

您是否忘记将
INTERNET
权限添加到清单中?是的,忘记了权限。谢谢!如果您的代码有任何类型的权限