在java服务器中发送edittext时出错。参见代码

在java服务器中发送edittext时出错。参见代码,java,android,tcp,android-asynctask,port,Java,Android,Tcp,Android Asynctask,Port,这是我的工作代码。但当我尝试单击将客户端连接到端口的按钮时,我的应用程序崩溃。查看我的代码 public class Order extends Activity { Button GoBackHome; private Button button1, button3; private EditText txtbox1,txtbox2,txtbox3,txtbox4,textField; private TextView tv; Button Pa

这是我的工作代码。但当我尝试单击将客户端连接到端口的按钮时,我的应用程序崩溃。查看我的代码

public class Order extends Activity {
    Button GoBackHome;
    private Button button1, button3;  
    private EditText txtbox1,txtbox2,txtbox3,txtbox4,textField;  
    private TextView tv;
    Button PayNow;
    CheckBox chxbx1, chxbx2, chxbx3,chxbx4;

    @Override
    public void onBackPressed() {
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            setContentView(R.layout.order);

            GoBackHome = (Button) findViewById(R.id.gohomebutton);
            PayNow = (Button) findViewById(R.id.button2);
            txtbox1= (EditText) findViewById(R.id.editText1);  
            button1 = (Button) findViewById(R.id.button1);  
            tv = (TextView) findViewById(R.id.editText5);  
            txtbox2= (EditText) findViewById(R.id.editText2);
            txtbox3= (EditText) findViewById(R.id.editText3);
            txtbox4= (EditText) findViewById(R.id.editText4);
            chxbx1 = (CheckBox)findViewById(R.id.checkbox1);
            chxbx2 = (CheckBox)findViewById(R.id.checkbox2);
            chxbx3 = (CheckBox)findViewById(R.id.checkbox3);
            chxbx4 = (CheckBox)findViewById(R.id.checkbox4);
            button3 = (Button) findViewById(R.id.button3);
            textField = (EditText) findViewById(R.id.editText6);
            button1.setOnClickListener(new clicker());
            Button get_view_button = (Button) findViewById(R.id.viewsummary);
            get_view_button.setOnClickListener(get_view_button_listener);

            GoBackHome.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    final Intent i = new Intent(Order.this, MainActivity.class);               
                    startActivity(i);
                }
            });

            PayNow.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    final Intent i = new Intent(Order.this, Payment.class);               
                    startActivity(i);
                }
            });

            chxbx1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                    if (chxbx1.isChecked()) {
                        txtbox1.setEnabled(true);
                        txtbox1.setFocusable(true);
                    } else {
                        txtbox1.setEnabled(false);
                        txtbox1.setFocusable(false);
                    }
                }
            });

            chxbx2.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                    if (chxbx2.isChecked()) {
                        txtbox2.setEnabled(true);
                        txtbox2.setFocusable(true);
                    } else {
                        txtbox2.setEnabled(false);
                        txtbox2.setFocusable(false);
                    }
                }
            });

            chxbx3.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                    if (chxbx3.isChecked()) {
                        txtbox3.setEnabled(true);
                        txtbox3.setFocusable(true);
                    } else {
                        txtbox3.setEnabled(false);
                        txtbox3.setFocusable(false);
                    }
                }
            });

            chxbx4.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                    if (chxbx4.isChecked()) {
                        txtbox4.setEnabled(true);
                        txtbox4.setFocusable(true);
                    } else {
                        txtbox4.setEnabled(false);
                        txtbox4.setFocusable(false);
                    }
                }
            });



    }

    private Button.OnClickListener get_view_button_listener = new Button.OnClickListener() {
        public void onClick(View v) {
          String r = "";
          if (chxbx1.isChecked()) {
            r = r + "\n" + chxbx1.getText() + ".............." + txtbox1.getText().toString();
            txtbox1.setEnabled(true);
            txtbox1.setFocusable(true);
          }
          if (chxbx2.isChecked()) {
            r = r + "\n" + chxbx2.getText() + ".............." + txtbox2.getText().toString();
            txtbox2.setEnabled(true);
            txtbox2.setFocusable(true);
          }
          if (chxbx3.isChecked()) {
            r = r + "\n" + chxbx3.getText() + ".............." + txtbox3.getText().toString();
            txtbox3.setEnabled(true);
            txtbox3.setFocusable(true);
          }
          if (chxbx4.isChecked()) {
            r = r + "\n" + chxbx4.getText() + ".............." + txtbox4.getText().toString();
            txtbox4.setEnabled(true);
            txtbox4.setFocusable(true);
          }
          textField.setText(r);

          button3.setOnClickListener(new View.OnClickListener()
          {

              public void onClick(View v)
              {
                  new ConnectToServerTask().execute(textField);
              }
          });

        }


      };



    class clicker implements Button.OnClickListener  
    {  
        public void onClick(View v)  
        {  
            String a,b,c,d;  
            Integer vis;  
            a = txtbox1.getText().toString();  
            b = txtbox2.getText().toString();
            c = txtbox3.getText().toString();
            d = txtbox4.getText().toString();
            vis = Integer.parseInt(a)*2+Integer.parseInt(b)*3+Integer.parseInt(c)*4+Integer.parseInt(d)*5;  
            tv.setText(vis.toString());  


        }  

    }  



}
我不知道下面代码的位置是否在它的右边

button3.setOnClickListener(new View.OnClickListener()
          {

              public void onClick(View v)
              {
                  new ConnectToServerTask().execute

(textField);
              }
          });
以下是我在服务器端的代码:

公共类TestTCP { 专用静态最终int端口=1485

private static ServerSocket serverSocket;
private static Socket clientSocket;
private static InputStreamReader inputStreamReader;
private static BufferedReader bufferedReader;
private static String message;
private static String multiple;

public static void main(String[] args)
{
    try
    {
        serverSocket = new ServerSocket(PORT, 0, InetAddress.getLocalHost());

        System.out.println("IP:  " + serverSocket.getInetAddress() + "  Port:  " +  serverSocket.getLocalPort());

    } catch (IOException e)
    {
        System.out.println("Could not listen on port: 1447");
    }

    System.out.println("Server started. Listening to the port 1447");

    while (true)
    {
        try
        {{
            clientSocket = serverSocket.accept(); // accept the client connection
            inputStreamReader = new InputStreamReader(clientSocket.getInputStream());
            bufferedReader = new BufferedReader(inputStreamReader); // get the client message
            message = bufferedReader.readLine();

            while ((message = bufferedReader.readLine()) != null) {
                System.out.println("Message from Table 1: " + message);}
                inputStreamReader.close();
                clientSocket.close();}

        } catch (IOException ex)
        {
            ex.printStackTrace();
            System.out.println("Problem in message reading");
        }
        finally {
            try {
                if (bufferedReader != null)bufferedReader.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
    }
}}}
这是针对Asynctask的(如果您想查看):


问题似乎在于
ConnectToServerTask
中的
mTextField
null
。您需要在该类中创建一个构造函数,以接受一个
EditText
,并尝试将其传递到
onClick()中
但是它看起来是错误的,或者将它作为一个内部类。如果您要通过它,那么它应该是

new ConnectToServerTask(textField).execute;
然后让一个构造函数接受一个类似的
EditText

public ConnectToServerTask(EditText textField)
{
    mTextField = textField;
}
这将给您带来更多问题。但是如果您将
AsyncTask
作为
活动的一个内部类,并且
textField
是一个成员变量,那么您的
AsyncTask
将已经可以访问它,而无需传递任何内容

编辑

public class Order extends Activity {
    Button GoBackHome;
    private Button button1, button3;  
    private EditText txtbox1,txtbox2,txtbox3,txtbox4,textField;  
    private TextView tv;
    Button PayNow;
    CheckBox chxbx1, chxbx2, chxbx3,chxbx4;


    // other functions such as onCreate()
    private class ConnectToServerTask extends AsyncTask<View, Integer, Socket> // inner class here inside your Activity
{
    private static final String IP_ADDRESS = "192.168.1.102";  // Kerv Server
    private static final int DEST_PORT = 1485; //port that is used

    private EditText mTextField;

    /**
    * Store provided views (used later in onPostExecute(...)).
    * 
    * Create socket to communicate with server (blocking call).
    */
    protected Socket doInBackground(View... params)
    {
公共类命令扩展活动{
按钮返回主页;
私人按钮按钮1、按钮3;
私有编辑文本txtbox1、txtbox2、txtbox3、txtbox4、textField;
私家图文电视;
按钮现在付款;
复选框chxbx1、chxbx2、chxbx3、chxbx4;
//其他函数,如onCreate()
私有类ConnectToServerTask在活动中扩展了AsyncTask//内部类
{
私有静态最终字符串IP_ADDRESS=“192.168.1.102”;//Kerv服务器
私有静态final int DEST_PORT=1485;//使用的端口
私有编辑文本mTextField;
/**
*存储提供的视图(稍后在onPostExecute(…)中使用)。
* 
*创建与服务器通信的套接字(阻止调用)。
*/
受保护的插座背景(视图…参数)
{

不使用所有这些代码,而使用logcat输出和最相关的代码部分会更有帮助。@codeMagic logcat发布。
ConnectToServerTask
第72行是什么?我认为它的?message=mTextField.getText().toString();//获取文本字段mTextField.setText(“\n”)上的文本消息;这一个!printwriter=新的printwriter(client.getOutputStream(),true);我明白了。但我在这里的日子真的很难过。我能做些什么来让它变得更好呢?我怎样才能使它成为我活动的一部分呢?就像你说的那样?给我一分钟,我会给你一小段时间example@Kerv我用一个简化的例子编辑了我的答案,让它成为一个内部类。你基本上只是把它放在我的某个地方您的
活动的de
我将在Order.java中插入它?而不是在ConnectToServerTask.java中?
public ConnectToServerTask(EditText textField)
{
    mTextField = textField;
}
public class Order extends Activity {
    Button GoBackHome;
    private Button button1, button3;  
    private EditText txtbox1,txtbox2,txtbox3,txtbox4,textField;  
    private TextView tv;
    Button PayNow;
    CheckBox chxbx1, chxbx2, chxbx3,chxbx4;


    // other functions such as onCreate()
    private class ConnectToServerTask extends AsyncTask<View, Integer, Socket> // inner class here inside your Activity
{
    private static final String IP_ADDRESS = "192.168.1.102";  // Kerv Server
    private static final int DEST_PORT = 1485; //port that is used

    private EditText mTextField;

    /**
    * Store provided views (used later in onPostExecute(...)).
    * 
    * Create socket to communicate with server (blocking call).
    */
    protected Socket doInBackground(View... params)
    {