2012-02-24 15 views
0

EditTextのString値をスレッドのメソッド(channel.basicpublishメソッド)に渡そうとしています。私は、Edittext.gettext()のようなメソッド "basicpublish"でtostringやグローバル変数を宣言して(上のオーバーライド)、ローカル変数に渡す方法を試してきましたが、エラー。私もバンドル/インテントを試みましたが、何も私のために働いていません(エラーを出します)。プレーンな文字列(Message = "HelloRabbitmq")を渡しているので、次のコードが動作します。だから私はどのようにスレッドの中にある "basicpublish"にedittextから文字列を渡すことができますか?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

0

あなたはETVTextWatcherを設定し、afterTextChangedコールバックでETVの値に、のetvValueを言わせて、String型のメンバ変数を設定しようとしましたか?その後、basicPublishにetvValueを渡すと働くことがあります...

+0

いいえ、私はhaventはなく、文字列= "" のようなgloabl変数を宣言し、仕事をしていません。とにかくたくさん感謝します。 – user1047222

関連する問題