android AsyncTask doInBackground(Void... params)中new socket抛出异常

银河小分队 2016-12-29 03:26:27

package com.example.socketapp;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
EditText ip;
EditText editText;
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ip=(EditText)findViewById(R.id.ip);
editText=(EditText)findViewById(R.id.editText);
text=(TextView)findViewById(R.id.textView2);

findViewById(R.id.connect).setOnClickListener(new OnClickListener() {

public void onClick(View v) {
connect();

}
});

findViewById(R.id.send).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
send();
}
});

}


//---------------------------

BufferedReader reader=null;
BufferedWriter writer=null;
Socket socket= null;
public void connect(){
try {
AsyncTask<Void, String, Void> read=new AsyncTask<Void, String, Void>(){

@Override
protected Void doInBackground(Void... params) {
try {
socket= new Socket(ip.getText().toString(),5000);
writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
publishProgress("@success");
while ((line=reader.readLine())!=null) {
publishProgress(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onProgressUpdate(String... values) {
if (values[0].equals("@success")) {
Toast.makeText(MainActivity.this, "连接成功 ", Toast.LENGTH_SHORT).show();
}
text.append(values[0]);
super.onProgressUpdate(values);
}
};
read.execute();

} catch (Exception e) {
Toast.makeText(MainActivity.this, "连接失败 ", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}




}

public void send(){
try {
writer.write(editText.getText().toString()+"\n");
writer.flush();
editText.setText("");

} catch (Exception e) {
e.printStackTrace();
}
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}



在进入异步线程中,new socke直接抛出异常,请大家指教?eclicpes的错误提示无

...全文
187 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
银河小分队 2016-12-30
  • 打赏
  • 举报
回复
能具体说明一下吗?
寒冰大神 2016-12-29
  • 打赏
  • 举报
回复
public Socket(InetAddress dstAddress, int dstPort) throws IOException { this(); checkDestination(dstAddress, dstPort); startupSocket(dstAddress, dstPort, null, 0, true); } 这个方法本来就抛出异常的啊,tyr{}catch(){} 处理了就行了。你这有错吗?

80,360

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧