2017-11-18 5 views
0

私はクライアント(アンドロイドアプリ) - サーバー(java on netbeans)ソケットを使用してデータ/文字列を送受信できるチュートリアルをインターネット上に発見しましたいずれかの側。ユーザーは手動でEditTextにデータを入力してから、ボタンをクリックして送信する必要があります。Androidスタジオ自動的にTextViewの文字列を1つのアクティビティからソケットアクティビティに渡す

MainActivity

public class MainActivity extends AppCompatActivity { 
    EditText e1; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    e1 = (EditText) findViewById(R.id.etMessage); 

    Thread myThread = new Thread(new MyServerThread()); 
    myThread.start(); 
} 

class MyServerThread implements Runnable{ 
    Socket s; 
    ServerSocket ss; 
    InputStreamReader isr; 
    BufferedReader bufferedReader; 
    Handler h = new Handler(); 

    String message; 
    @Override 


    public void run() { 

     try{ 
      ss = new ServerSocket(2222); 
      while(true){ 
       s = ss.accept(); 
       isr = new InputStreamReader(s.getInputStream()); 
       bufferedReader = new BufferedReader(isr); 
       message = bufferedReader.readLine(); 

       h.post(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getApplicationContext(),message, Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     }catch (IOException e){ 
      e.printStackTrace(); 
     } 

    } 
} 


public void send(View v){ 
    MessageSender messageSender = new MessageSender(); 
    messageSender.execute(e1.getText().toString()); 

} 


} 

するmessageSender

public class MessageSender extends AsyncTask<String,Void,Void>{ 
Socket s; 
DataOutputStream dos; 
PrintWriter pw; 
@Override 
protected Void doInBackground(String... voids) { 

    String message = voids[0]; 

    try{ 
     s = new Socket("192.168.254.105",2222); 
     pw = new PrintWriter(s.getOutputStream()); 
     pw.write(message); 
     pw.close(); 
     s.close(); 

    }catch (IOException e){ 
     e.printStackTrace(); 
    } 
    return null; 
} 
} 

は今、私が次に何をしようとしているものです代わりに、手動でGUIにテキストを入力し、送信を押しますボタンを押すと、別のアクティビティからTextViewに文字列を送信したいと思いましょう。

String message = getIntent().getStringExtra("message_key"); 
    passedMessage = (TextView)findViewById(R.id.tvPassed); 
    passedMessage.setText(message); 

問題が実行した後であると、次のコードを使用してMainActivity.classにvity1.class。(ショーのTextViewがテキスト「こんにちは」conatains)

String message = show.getText().toString(); 
Intent intent= new Intent(Activity1.this, MainActivity.class); 
intent.putExtra("message_key", message); 
startActivity(intent); 

ANSが主な活動でそれを呼び出します。 MainActivityのtextviewに渡された文字列はguiにのみ表示されますが、ソケット自体には送信されません。どのようにそれを動作させるためにどのようなアイデア?あなたが可能な第2の活動で

+0

を呼び出す前に、すべてのコードは、あなたが投稿していることでしたボタンのActionListenerを割り当てるようにしてくださいは、中のTextViewから文字列を取ることでしたActivity1をクリックしてMainActivityのTextViewに貼り付けます。 passedMessage.setText(message)を呼び出した後、実際に文字列をサーバーに送信するコードを記述する必要があります。あなたがサーバーソケットに文字列を送信しない理由は、決してそうするように言わなかったからです! –

答えて

0

String message = getIntent().getStringExtra("message_key"); 
passedMessage = (TextView)findViewById(R.id.tvPassed); 
if(message != null && !message.isEmpty()) { 
    passedMessage.setText(message); 
    sendButton.performClick(); 
} 

そして、あなたはperformClick

関連する問題