【问题标题】:Android Studio Automatically Passing String on TextView from one activity to socket activityAndroid Studio 自动将 TextView 上的字符串从一个活动传递到套接字活动
【发布时间】:2017-11-19 02:53:56
【问题描述】:

我在互联网上找到了一个教程,它允许客户端(android 应用程序)-服务器(netbeans 上的 java)套接字,它允许我在任一端发送和接收数据/字符串。用户必须手动将数据输入到 EditText 中,然后使用 on click 方法按下按钮发送。

主活动

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

}


}

消息发送者

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 上从另一个活动发送一个字符串,比如说 Activity1.class 到 MainActivity.class 使用以下代码。(显示 Textview 包含文本“Hello”)

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

Ans 将在 Main Activity 上调用它

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

问题是在运行程序后,传递给 MainActivity 上 textview 的字符串只会显示在 gui 上,但不会发送到套接字本身。知道如何使它工作吗?

【问题讨论】:

  • 您发布的所有代码都是从 Activity1 中的 TextView 中获取一个字符串并将其粘贴到 MainActivity 中的 TextView 中。调用passedMessage.setText(message) 后,需要编写实际将字符串发送到服务器的代码!您不将字符串发送到服务器套接字的原因是因为您从未告诉它这样做!

标签: java sockets android-studio


【解决方案1】:

在第二个活动中,您可以:

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

并确保在调用 performClick 之前分配按钮的 ActionListener

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    相关资源
    最近更新 更多