![](/img/trans.png)
[英]How to display calculations result in a hinted TextView in Android Studio/Java?
[英]How can I display text in a function with textview Android Studio in java
在代码从套接字接收到消息后,我在 class 中。 我想展示它。 我已经尝试使用私有 static 导入它,但是当我想使用 function settext
时,它会停止应用程序。 如果不可能,我如何返回变量并在主 class 中正常获取settext
的textview
。
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.