0

我是安卓新手。我有以下代码:

    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];
    }
}
}

我想使用从 EditTexts server_ip 和端口获取的服务器 ip 和端口设置一个套接字。在 connectTask 中,我进行了从字符串到 int 的转换: int servport 但我仍然收到错误:

    Caused by: java.lang.NumberFormatException: Invalid int "".

我必须将 serverAddr 设置为 String,因为我必须将其放入:

    new connectTask().execute(serverAddr, serverPort);

但随后套接字需要端口为 Int,因此需要进行转换。

你能帮我告诉我做错了什么吗?

4

1 回答 1

0

您的问题出在您的代码中。您将多个参数传递给一个只接收一个的函数。这是执行的定义:execute (Params... params)

new connectTask().execute(serverAddr, serverPort);

将行改为:

new connectTask().execute(new String[]{serverAddr,serverPort});

尽管文档没有说明,但如果您传入多个参数,则需要传入第一个模板对象的数组。

于 2013-07-22T16:21:03.773 回答