TCP ワーカー スレッドを作成するデフォルトの起動アクティビティである MainActivity があります。この TCP スレッドは、サーバーから一部のデータを受信し、表示されている現在のアクティビティにそれを渡します。たとえば、受信したデータを表示する Activity1 と Activity2 という 2 つのアクティビティがあります。
Handlers を使用してこれを達成するにはどうすればよいですか? これが私が持っているものの概要です...私が完全に間違っている場合は、解決策を提案するか、すべてを変更してください。
public class MainActivity extends Activity
{
public static TCPFunctions tcp = null;
public static Handler handler;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
handler = new Handler();
tcp = new TCPFunctions(this, handler);
tcp.start();
}
}
------------------------------TCP スレッド クラス ------- --------------------------
public class TCPFunctions extends Thread
{
public Handler handler;
//socket and io streams are here and they work properly
Public TCPFunctions(MainActivity main, Handler _handler)
{
this.main = main;
handler = _handler;
}
public void run()
{
Intent showActivity1 = new Intent(main, Activity1.class);
main.startActivity(showActivity1);
while(true)
{
directories = new Vector<String>();
directories = (Vector<String>) inputStream.readObject();
Message msg = Message.obtain();
msg.obj = directories;
handler.sendMessage(msg);
directories = null;
}
}
}
ここで、Activity1 で、このディレクトリ オブジェクトが必要だとします...Activity1 にボタンがあるとします。このボタンを押すと、ディレクトリ オブジェクトを取得するようにサーバーに要求が送信されます...これは TCP スレッドによって受信されます...どうすればよいでしょうかActivity1 でこれを取得し、UI を更新します...
基本的に、ディレクトリ オブジェクトは文字列の Vetor であり、Activity1/Activity2 に含まれる ListView に文字列を表示したい
public class Activity1 extends Activity implements OnClickListener,OnItemClickListener
{
private ListView directoryList;
private Button rootButton;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.fileexplorer);
directoryList = (ListView) findViewById(R.id.directories);
rootButton.setOnClickListener(this);
directoryList.setOnItemClickListener(this);
}
public void onClick(View v)
{
switch(v.getId())
{
case R.id.root_button:
Log.d(TAG, "FileExplorer: Root Button Pressed");
//request for directories made here
break;
}
}
// What should be the Handler code to get the directories ?
}