在弄那個局域網的socket通信的時候,在模擬機運行進行通信一切完好,可是運行在真機上,就會崩潰。
在模擬機一切功能運行正常,可以正常的發送資訊,在真機可以連接上服務器,可是一發送資訊就崩潰,就會拋出例外,程式就關閉
AS提示的資訊是
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.inchat, PID: 2857
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
at java.net.SocketOutputStream.write(SocketOutputStream.java:157)
at java.io.PrintStream.write(PrintStream.java:492)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)
at java.io.PrintStream.write(PrintStream.java:543)
at java.io.PrintStream.print(PrintStream.java:687)
at java.io.PrintStream.println(PrintStream.java:824)
at com.example.inchat.MainActivity$MsgThread$1.onClick(MainActivity.java:120)
at android.view.View.performClick(View.java:5647)
at android.view.View$PerformClick.run(View.java:22461)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6374)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:931)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:821)
在服務器端提示的資訊是
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:210)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at Server$Service.run(Server.java:72)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
代碼
package com.example.inchat;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Looper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.ThemedSpinnerAdapter;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
public class MainActivity extends AppCompatActivity {
private String host = "192.168.0.107";
private Button button;
private EditText editText;
private TextView textView;
private StringBuilder sb = null;
private BufferedReader br;
private PrintStream ps;
private PrintWriter pw;
private Intent intent;
public static final int port = 12345;
int count = 0;
Socket client;
String s;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button_send);
editText = (EditText) findViewById(R.id.editText);
textView = (TextView) findViewById(R.id.textView);
showInputDialog();
}
//#99CCFF
private class DialogThread implements Runnable{
public DialogThread() {
new Thread(this).start();
}
@Override
public void run() {
showInputDialog();
}
}
public void showInputDialog() {
final Intent intent = new Intent();
final EditText editText1 = new EditText(MainActivity.this);
AlertDialog.Builder inputDialog = new AlertDialog.Builder(MainActivity.this);
inputDialog.setTitle("起一個好聽點的名字");
inputDialog.setView(editText1);
final String[] t = new String[1];
inputDialog.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String temp = editText1.getText().toString();
new StartThread(temp);
t[0] = temp;
}
});
inputDialog.show();
// return t[0];
}
private class StartThread implements Runnable {
String s;
public StartThread(String s) {
new Thread(this).start();
this.s = s;
}
@Override
public void run() {
try {
client = new Socket(host, port);
br = new BufferedReader(new InputStreamReader(client.getInputStream()));
ps = new PrintStream(client.getOutputStream());
ps.println(s);
} catch (IOException e) {
e.printStackTrace();
}
new MsgThread();
}
}
private class MsgThread implements Runnable{
public MsgThread() {
new Thread(this).start();
}
@Override
public void run() {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str = editText.getText().toString();
textView.setText(str);
ps.println(str);
}
});
}
}
}
在模擬機一切功能運行正常,可以正常的發送資訊,在真機可以連接上服務器,可是一發送資訊就崩潰
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/133412.html
標籤:移動開發其他問題
上一篇:求助,Android的作業,用ecplise做的,整體做完了,就是用gridview點擊圖片跳轉的時候出不來
下一篇:eclipse重下后不能啟動
