Android 将编辑文本传递给线程

Android 将编辑文本传递给线程,android,Android,我试图将EditText的字符串值传递给线程中的方法,即方法“channel.basicpublish”。我在方法“basicpublish”中尝试了许多方法,如Edittext.gettext().tostring或declare全局变量(上面的覆盖)并将它们传递给局部变量,但另一方面,我得到了一个空字符串,尽管没有错误。我也尝试了bundle/intent,但没有任何效果(给出错误)。以下代码将正常工作,因为我正在传递一个普通字符串(Message=“HelloRabbitmq”)。那么,如

我试图将EditText的字符串值传递给线程中的方法,即方法“channel.basicpublish”。我在方法“basicpublish”中尝试了许多方法,如Edittext.gettext().tostring或declare全局变量(上面的覆盖)并将它们传递给局部变量,但另一方面,我得到了一个空字符串,尽管没有错误。我也尝试了bundle/intent,但没有任何效果(给出错误)。以下代码将正常工作,因为我正在传递一个普通字符串(Message=“HelloRabbitmq”)。那么,如何将一个字符串从edittext传递到线程中的“basicpublish”呢

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=“”)可以完成这项工作。无论如何,非常感谢。非常感谢,我的模拟器没有响应这段代码。但是类变量完成了任务,谢谢!