java.lang.NumberFormatException:无效int:“”;在android中,服务器和端口
我是Android新手。我有以下代码:java.lang.NumberFormatException:无效int:“”;在android中,服务器和端口,android,numberformatexception,Android,Numberformatexception,我是Android新手。我有以下代码: public class SettingsActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tcp_settings); Button buttonConnect = (Butt
public class SettingsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tcp_settings);
Button buttonConnect = (Button) findViewById(R.id.buttonConnect);
buttonConnect.setOnClickListener(new View.OnClickListener() {
EditText server_ip = (EditText) findViewById(R.id.set_server_ip);
EditText port = (EditText) findViewById(R.id.set_port);
@Override
public void onClick(View view) {
String serverAddr = server_ip.getText().toString();
String serverPort = port.getText().toString();
new connectTask().execute(serverAddr, serverPort);
}
});
}
class connectTask extends AsyncTask<String, Void, String> {
Socket socket;
@Override
protected String doInBackground(String... params) {
int servport = Integer.parseInt(params[1]);
try {
socket = new Socket(params[0], servport);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return params[0] + " : " + params[1];
}
}
}
我必须将serverAddr设置为String,因为我必须将其放入:
new connectTask().execute(serverAddr, serverPort);
但套接字要求端口为Int,所以需要进行转换
你能帮我说说我做错了什么吗?你的问题就在你的代码里。将多个参数传递到只接收一个参数的函数中。下面是execute的定义:
execute(Params…Params)
newconnecttask().execute(serverAddr,serverPort)代码>
将行更改为:
newconnecttask().execute(新字符串[]{serverAddr,serverPort})代码>
尽管文档中没有说明,但如果要传入多个参数,则需要传入的第一个模板对象的数组 params[1]==”
,”
不是有效的int
,因此当您执行Integer.parseInt(params[1])
时,它会抛出NumberFormatException
!!!您是否检查了什么port.getText().toString()代码>提供给您?但为什么“params[1]=”?我不明白这个。。。对不起,我知道这对你来说可能很愚蠢…这很有帮助,非常感谢。你能告诉我为什么我不能像在我的代码中那样做吗?@user2607507我在我的回答中又添加了一点,AsynTask的Android文档就是一个例子,其中:new downloadFileTask().execute(url1,url2,url3)代码>。看起来我可以将多个参数发送到doInBackground
。后来:for(inti=0;i
,所以它看起来像是execute()
中的表元素。
new connectTask().execute(serverAddr, serverPort);