繁体   English   中英

如何在 function 中使用 textview Android Studio 在 Z93F725A074233FEC889ZDF48 中显示文本

[英]How can I display text in a function with textview Android Studio in java

在代码从套接字接收到消息后,我在 class 中。 我想展示它。 我已经尝试使用私有 static 导入它,但是当我想使用 function settext时,它会停止应用程序。 如果不可能,我如何返回变量并在主 class 中正常获取settexttextview

class Serveur implements Runnable {
            private Exception exception;



            private DataInputStream dis;
            Handler handler = new Handler( );


            public void run() {
                System.out.println( "start serveur" );
                handler.post( new Runnable() {

                    @Override

                    public void run() {
                        Toast.makeText(getApplicationContext(),"start message", Toast.LENGTH_LONG).show();
                    }
                } );


                try {


                    socketserveur = new ServerSocket(5000);

                    String line = "no";

                    while (line == "no") {
                        try {
                             sock = socketserveur.accept();
                            dis = new DataInputStream(sock.getInputStream());
                            final String message_entrant21;
                            message_entrant21 = dis.readLine();

                            handler.post( new Runnable() {

                                @Override

                                public void run() {
                                    Toast.makeText(getApplicationContext(), message_entrant21, Toast.LENGTH_LONG).show();
                                }
                            } );


                        }catch (Exception i){
                            System.out.println( i );

                            handler.post( new Runnable() {

                                @Override

                                public void run() {
                                    Toast.makeText(getApplicationContext(),"error", Toast.LENGTH_LONG).show();
                                }
                            } );

                        }

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

对于使用私有 static 导入textview

 class Serveur implements Runnable {
            private Exception exception;




            private DataInputStream dis;
            Handler handler = new Handler( );

感谢您的帮助。

我已经编辑了整个答案:这个答案包含一个示例代码,它启动一个后台线程并通过定期更新更新Activity's TextView

MainActivity代码

public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private Handler myHandler;
private TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    textView = findViewById(R.id.textView);

    // In MyHandler class you will receive messages.
    myHandler = new MyHandler(new WeakReference<>(MainActivity.this));
    startThread();
}

private void startThread() {
    new Thread(new Serveur(myHandler) {
        @Override
        public void run() {
            super.run();
        }
    }).start();
}


private static class MyHandler extends Handler {

    private WeakReference<MainActivity> activityWeakReference;

    private MyHandler(WeakReference<MainActivity> activityWeakReference) {
        this.activityWeakReference = activityWeakReference;
    }

    @Override
    public void handleMessage(@NonNull Message msg) {
        if (null == activityWeakReference.get()) {
            Log.e(TAG, "handleMessage: Activity destroyed");
            return;
        }
        String string = (String) msg.obj;
        Log.e(TAG, "handleMessage: received string = " + string);
        activityWeakReference.get().textView.setText(string);

    }
  }

}

Serveur Class代码:

class Serveur implements Runnable {

private final Handler myHandler;


public Serveur(Handler uiHandler) {
    myHandler = uiHandler;
}


public void run() {
    System.out.println("start serveur");

    // simply loop and make Thread sleep in every iteration(you need to implement your task)
    for (int i = 1; i < 10; i++) {
        try {
            Thread.sleep(i * 500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // got some data ?? pass it via Message to handler.
        final Message message = Message.obtain();
        message.obj = "Read line" + i;  // wrap your data in message Object.
        myHandler.sendMessage(message); // this sent message will be received in MainActivity.MyHandler class. 

    }

  }
}

我希望你的问题现在能得到解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM