<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "[Android] TextView 即時更新的問題"]]></title>
		<link>https://forum.andowson.com/posts/list/5.page</link>
		<description><![CDATA[Latest messages posted in the topic "[Android] TextView 即時更新的問題"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>[Android] TextView 即時更新的問題</title>
				<description><![CDATA[ 目前想要做一個良葛格之前有做過的多人聊天的Java程式 
<br>
<br>
目前卡在說傳過來的訊息都是亂碼(不知道為什麼?) 
<br>
<br>
還有不知道怎樣寫關調視窗就結束skt連接的方法(找了一段時間找不到) 
<br>
<br>
以下為我修改良葛格client端的程式碼套用在android上的 
<br>
[code] 
<br>
package com.demo.android.chat; 
<br>
<br>
import java.io.BufferedReader; 
<br>
import java.io.IOException; 
<br>
import java.io.InputStreamReader; 
<br>
import java.io.PrintStream; 
<br>
import java.net.InetAddress; 
<br>
import java.net.Socket; 
<br>
<br>
import android.os.Handler; 
<br>
<br>
<br>
public class ChatClientSocket extends Thread{ 
<br>
<br>
 private Socket skt; // 客戶端連線Socket物件 
<br>
 private InetAddress host; // 指定的伺服端IP 
<br>
 private int port; // 指定的伺服端連接埠 
<br>
<br>
 private BufferedReader theInputStream; 
<br>
 private PrintStream theOutputStream; 
<br>
 private Chat chatBox; 
<br>
 private static String message; 
<br>
<br>
<br>
 public ChatClientSocket(String ip, int port) { 
<br>
 try { 
<br>
 // 取得伺服端的InetAddress物件、通訊連接埠 
<br>
 host = InetAddress.getByName(ip); 
<br>
 this.port = port; 
<br>
 } 
<br>
 catch (IOException e) { 
<br>
 e.printStackTrace(); 
<br>
 } 
<br>
 } 
<br>
<br>
 // 指定這個Socket的訊息觀察者 
<br>
 public void setMessageObserver(Chat box) { 
<br>
 chatBox = box; 
<br>
 } 
<br>
<br>
 public String getMessage() { 
<br>
 return message; 
<br>
 } 
<br>
<br>
 public void run() { 
<br>
 try { 
<br>
 message = "嘗試連線......"; 
<br>
 chatBox.UpdateTextView(); 
<br>
<br>
<br>
 // 建立Socket物件並嘗試連線 
<br>
 skt = new Socket(host, port); 
<br>
<br>
 message = "連線成功\n"; 
<br>
 chatBox.UpdateTextView(); 
<br>
<br>
 // 從InputStream建立讀取緩衝區 
<br>
 theInputStream = new BufferedReader( 
<br>
 new InputStreamReader(skt.getInputStream())); 
<br>
 // 從OutputStream中建立PrintStream物件 
<br>
 theOutputStream = new PrintStream(skt.getOutputStream()); 
<br>
<br>
 // 讀取資料迴圈 
<br>
 while((message = theInputStream.readLine()) != null) { 
<br>
 // 將之顯示在TextView上 
<br>
 message = ": " + message + "\n"; 
<br>
 chatBox.UpdateTextView(); 
<br>
 } 
<br>
<br>
 if(message == null) { 
<br>
 skt.close(); 
<br>
 message = "連線中斷！\n"; 
<br>
 chatBox.UpdateTextView(); 
<br>
<br>
 } 
<br>
<br>
 }catch (IOException e) { 
<br>
 message = e.toString(); 
<br>
 chatBox.UpdateTextView(); 
<br>
 } 
<br>
<br>
 } 
<br>
 //將要傳送的訊息傳給server端 
<br>
 public void dataOutput(String data) { 
<br>
 theOutputStream.println(data); 
<br>
 } 
<br>
<br>
} 
<br>
<br>
[/code] 
<br>
[code] 
<br>
package com.demo.android.chat; 
<br>
<br>
<br>
import android.app.Activity; 
<br>
import android.os.Bundle; 
<br>
import android.os.Handler; 
<br>
import android.view.LayoutInflater; 
<br>
import android.view.View; 
<br>
import android.view.View.OnClickListener; 
<br>
import android.widget.Button; 
<br>
import android.widget.EditText; 
<br>
import android.widget.TextView; 
<br>
<br>
public class Chat extends Activity { 
<br>
 /** Called when the activity is first created. */ 
<br>
<br>
 private Button go; //發送訊息的按鈕 
<br>
 private Button clientBtn; //連接伺服器的按鈕 
<br>
 private Button serverBtn; 
<br>
 private EditText tfAddress ; //輸入IP 
<br>
 private EditText tfPort ; //輸入Port 
<br>
 private EditText tfChat ; //輸入要傳送的訊息 
<br>
 private TextView result ; //伺服器端傳送的訊息display在這 
<br>
 private ChatClientSocket clientSkt; //客戶端連線處理執行緒 
<br>
<br>
 public static Handler mHandler = new Handler(); 
<br>
<br>
<br>
 final Runnable mUpdateResults = new Runnable() { 
<br>
 public void run() { 
<br>
 update(); 
<br>
 } 
<br>
 }; 
<br>
<br>
 public void UpdateTextView(){ 
<br>
 mHandler.post(mUpdateResults); 
<br>
 } 
<br>
 @Override 
<br>
 public void onCreate(Bundle savedInstanceState) { 
<br>
 super.onCreate(savedInstanceState); 
<br>
 setContentView(R.layout.main); 
<br>
 // Listen for button clicks 
<br>
<br>
<br>
 result = (TextView) findViewById(R.id.textview); 
<br>
 tfAddress =(EditText)findViewById(R.id.ip); 
<br>
 tfPort = (EditText)findViewById(R.id.port); 
<br>
 tfChat = (EditText)findViewById(R.id.chat); 
<br>
 clientBtn = (Button)findViewById(R.id.connect); 
<br>
 go = (Button)findViewById(R.id.go_btn); 
<br>
 clientBtn.setOnClickListener(connectserver); 
<br>
 go.setOnClickListener(goserver); 
<br>
 } 
<br>
<br>
 //連接伺服器 
<br>
 private OnClickListener connectserver = new OnClickListener(){ 
<br>
 public void onClick(View v){ 
<br>
 setClient(); 
<br>
 } 
<br>
 }; 
<br>
<br>
 //傳送訊息給伺服器 
<br>
 private OnClickListener goserver = new OnClickListener(){ 
<br>
 public void onClick(View v){ 
<br>
 // 將資料透過連線執行緒送出 
<br>
 clientSkt.dataOutput(tfChat.getText().toString()); 
<br>
 // 清除下方文字欄位內容 
<br>
 tfChat.setText(""); 
<br>
<br>
 } 
<br>
 }; 
<br>
<br>
 public void setServerBtn(Button serverBtn) { 
<br>
 this.serverBtn = serverBtn; 
<br>
 } 
<br>
 public Button getServerBtn() { 
<br>
 return serverBtn; 
<br>
 } 
<br>
<br>
 //對textView進行更新 
<br>
 private void update() { 
<br>
 result.append(clientSkt.getMessage()); 
<br>
 } 
<br>
<br>
 private void setClient() { 
<br>
 // 取得指定的IP與連接埠 
<br>
 int port = Integer.parseInt(tfPort.getText().toString()); 
<br>
 // 建立客戶端連線執行緒 
<br>
 clientSkt = new ChatClientSocket(tfAddress.getText().toString(), port); 
<br>
 clientSkt.setMessageObserver(this); 
<br>
 // 啟動執行緒進行連線 
<br>
 clientSkt.start(); 
<br>
 } 
<br>
<br>
} 
<br>
[/code]]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/341/632.page</guid>
				<link>https://forum.andowson.com/posts/preList/341/632.page</link>
				<pubDate><![CDATA[Sat, 15 Aug 2009 16:57:26]]> GMT</pubDate>
				<author><![CDATA[ lingerkptor]]></author>
			</item>
			<item>
				<title>[Android] TextView 即時更新的問題</title>
				<description><![CDATA[ 請問一下~我照著執行這程式... 
<br>
可正常連線到PC端的伺服上~ 
<br>
也可發送訊息給伺服， 
<br>
但伺服發送的訊息， 
<br>
此Android客戶端卻接收不到? 
<br>
不知是沒接收到~還是沒更新畫面呢!?]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/341/881.page</guid>
				<link>https://forum.andowson.com/posts/preList/341/881.page</link>
				<pubDate><![CDATA[Tue, 20 Jul 2010 21:15:50]]> GMT</pubDate>
				<author><![CDATA[ chenjimlin]]></author>
			</item>
	</channel>
</rss>