2012-02-24 81 views
0

我想将EditText的字符串值传递给线程中的方法“channel.basicpublish”。我已经在像edittext.gettext()。tostring或声明全局变量(以上覆盖)并将它们传递给局部变量的方法中尝试了许多方法,但另一方面,我得到一个空字符串,尽管没有错误。我也试过捆绑/意图,但没有任何工作对我来说(给出错误)。下面的代码将工作,因为我传递一个纯字符串(Message =“HelloRabbitmq”)。那么我怎样才能将edittext中的字符串传递给线程中的“basicpublish”呢?将Edittext传递给线程

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(); 
      } 

} 

回答

0

类变量,应该工作正常此...

我也做了一些变化,但随意改回你怎么过的,但除了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(); 
     }  
    } 
}; 
+0

非常感谢,我的模拟器不响应此代码。但是类变量完成了这项工作,谢谢! – user1047222 2012-02-24 14:29:11

0

你尝试设置上ETV一个TextWatcher,并设置一个字符串成员变量,让我们说etvValue,以ETV的价值afterTextChanged回调?然后,通过etvValue到basicPublish可能工作...

+0

不,我没但是像串串=一个声明gloabl变量“”,做这项工作。反正非常感谢。 – user1047222 2012-02-24 14:27:28