在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)
{