Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NumberFormatException:无效int:“”;在android中,服务器和端口_Android_Numberformatexception - Fatal编程技术网

java.lang.NumberFormatException:无效int:“”;在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

我是Android新手。我有以下代码:

    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);