Android 将编辑文本传递给线程
我试图将EditText的字符串值传递给线程中的方法,即方法“channel.basicpublish”。我在方法“basicpublish”中尝试了许多方法,如Edittext.gettext().tostring或declare全局变量(上面的覆盖)并将它们传递给局部变量,但另一方面,我得到了一个空字符串,尽管没有错误。我也尝试了bundle/intent,但没有任何效果(给出错误)。以下代码将正常工作,因为我正在传递一个普通字符串(Message=“HelloRabbitmq”)。那么,如何将一个字符串从edittext传递到线程中的“basicpublish”呢Android 将编辑文本传递给线程,android,Android,我试图将EditText的字符串值传递给线程中的方法,即方法“channel.basicpublish”。我在方法“basicpublish”中尝试了许多方法,如Edittext.gettext().tostring或declare全局变量(上面的覆盖)并将它们传递给局部变量,但另一方面,我得到了一个空字符串,尽管没有错误。我也尝试了bundle/intent,但没有任何效果(给出错误)。以下代码将正常工作,因为我正在传递一个普通字符串(Message=“HelloRabbitmq”)。那么,如
public class HandlerActivity extends Activity {
/** Called when the activity is first created. */
TextView tv;
EditText etv;
String QUEUE_NAME="bye";
String EXCHANGE_NAME="logs";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.out);
etv = (EditText) findViewById(R.id.out2);
etv.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
Toast.makeText(HandlerActivity.this, etv.getText(), Toast.LENGTH_SHORT).show();
String Kamran = etv.getText().toString();
return true;
}
return false;
}
});
final Handler handler=new Handler();
final Runnable r=new Runnable()
{
public void run()
{
tv.append("Hello");
}
};
handler.postDelayed(r, 1000);
Thread thread = new Thread()
{
@Override
public void run() {
try {
while(true) {
sleep(1000);
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.2.3");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare(EXCHANGE_NAME, "fanout", true);
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "Hello Rabbitmq";
channel.basicPublish( "logs",QUEUE_NAME, null, message.getBytes());
channel.close();
connection.close();
handler.postDelayed(r, 1000);
}
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
};
thread.start();
}
}
您是否尝试在etv上设置TextWatcher,并将字符串成员变量(比如etvValue)设置为posterextchanged回调中etv的值?然后,将etvValue传递给basicPublish可能会起作用…类变量应该可以很好地用于此 我也做了一些更改,但可以随意更改回您的使用方式,但是除了EditText视图中的文本之外,代码中似乎还有一些其他缺陷 比如:
public class HandlerActivity extends Activity {
private TextView tv;
private EditText etv;
private String QUEUE_NAME = "bye";
private String EXCHANGE_NAME = "logs";
private String message = "";
private Handler handler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
handler = new Handler();
tv = (TextView) findViewById(R.id.out);
etv = (EditText) findViewById(R.id.out2);
etv.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
Toast.makeText(HandlerActivity.this, etv.getText().toString(), Toast.LENGTH_SHORT).show();
message = etv.getText().toString();
return true;
}
return false;
}
});
}
@Override
public void onStart() {
super.onStart();
handler.postDelayed(publish, 1000);
}
private Runnable publish = new Runnable() {
public void run() {
try {
//You should probably not have this as "true", you should always have some way to bail out of this.
//Technically even if you kill this activity it may never stop.
while(true) {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.2.3");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare(EXCHANGE_NAME, "fanout", true);
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
channel.basicPublish("logs", QUEUE_NAME, null, message.getBytes());
channel.close();
connection.close();
//Why are you running the this loop again? Uncomment if thats REALLY what you want
//handler.postDelayed(publish, 1000);
}
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
};
不,我没有,但是声明gloabl变量(比如String=“”)可以完成这项工作。无论如何,非常感谢。非常感谢,我的模拟器没有响应这段代码。但是类变量完成了任务,谢谢!