-3
我一直在试图学习一些android开发,我一直在尝试进入某种联网,以便我可以创建一个应用程序基于Web。无论如何,我开始试图制作一个使用手机或笔记本电脑作为客户端的聊天程序,并在我的笔记本电脑上运行服务器。我的问题是,只要我尝试发送消息到服务器,我的应用程序就会关闭。我在考虑可能性,但我不确定实际发生了什么。聊天程序自动关闭
反正这里的机器人代码:
package com.example.android.chatprogram;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void sendMessage()
{
try {
TextView inp = (TextView) findViewById(R.id.msg_box);
TextView receive = (TextView) findViewById(R.id.chat_window);
Socket clientSocket = new Socket("localhost", 9002); //99.228.211.122
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String msg = inp.getText().toString();
outToServer.writeBytes(msg + '\n');
receive.append(inFromServer.readLine());
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这里的服务器代码(在我的笔记本电脑上运行):
import java.io.*;
import java.net.*;
public class server {
public static void main(String args[]) throws Exception {
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(9001);
while(true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
System.out.println(clientSentence);
capitalizedSentence = clientSentence.toUpperCase() + '\n';
outToClient.writeBytes(capitalizedSentence);
}
}
预先感谢您!
编辑:我终于找到了堆栈跟踪!
05-0121:48:04.74828076-28076/com.example.android.chatprogramE/AndroidRuntime:
FATALEXCEPTION:main
Process:com.example.android.chatprogram,PID:28076
java.lang.IllegalStateException:Couldnotexecutemethodforandroid:onClick
atandroid.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
atandroid.view.View.performClick(View.java:5623)
atandroid.view.View$PerformClick.run(View.java:22433)
atandroid.os.Handler.handleCallback(Handler.java:751)
atandroid.os.Handler.dispatchMessage(Handler.java:95)
atandroid.os.Looper.loop(Looper.java:154)
atandroid.app.ActivityThread.main(ActivityThread.java:6247)
atjava.lang.reflect.Method.invoke(NativeMethod)
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
Causedby:java.lang.reflect.InvocationTargetException
atjava.lang.reflect.Method.invoke(NativeMethod)
atandroid.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
atandroid.view.View.performClick(View.java:5623)
atandroid.view.View$PerformClick.run(View.java:22433)
atandroid.os.Handler.handleCallback(Handler.java:751)
atandroid.os.Handler.dispatchMessage(Handler.java:95)
atandroid.os.Looper.loop(Looper.java:154)
atandroid.app.ActivityThread.main(ActivityThread.java:6247)
atjava.lang.reflect.Method.invoke(NativeMethod)
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
Causedby:android.os.NetworkOnMainThreadException
atandroid.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
atjava.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:333)
atjava.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196)
atjava.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
atjava.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
atjava.net.Socket.connect(Socket.java:586)
atjava.net.Socket.connect(Socket.java:535)
atjava.net.Socket.<init>(Socket.java:427)
atjava.net.Socket.<init>(Socket.java:210)
atcom.example.android.chatprogram.MainActivity.sendMessage(MainActivity.java:29)
atjava.lang.reflect.Method.invoke(NativeMethod)
atandroid.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
atandroid.view.View.performClick(View.java:5623)
atandroid.view.View$PerformClick.run(View.java:22433)
atandroid.os.Handler.handleCallback(Handler.java:751)
atandroid.os.Handler.dispatchMessage(Handler.java:95)
atandroid.os.Looper.loop(Looper.java:154)
atandroid.app.ActivityThread.main(ActivityThread.java:6247)
atjava.lang.reflect.Method.invoke(NativeMethod)
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
'我的应用程序刚刚关闭'你是什么意思?如果它崩溃,然后添加您的错误日志! –
我想弄清楚如何得到错误日志。每当我使用像LogCat这样的应用程序时,我只会得到一个永无止境的文字墙。 @AtefHares – Cameron
这在这里解释太多了,我担心(我猜这对你更好),你必须搜索谷歌如何处理logcat。我几乎可以肯定你会找到很多教程和视频。 –