Java 类之间的Android消息
这是我的第一篇文章,我没有发现任何类似的东西,所以我决定问一下 我正在为Android开发一款扑克游戏来练习SDK并刷新/改进我的Java。这是一个简单的应用程序,控制德州扑克手 最初,我只使用JavaSE编写类,看起来不错。每个类都有自己的用途,并使用控制台输入/输出对其进行测试,我可以看出它确实有效:) 上周,我决定将它移植到Android上,通过图形界面查看发生的事情,所以我得到了资源图片,制作了一个活动,并包括了我的扑克包 在移植到Android之前,我可以放一个println(或readLine)来查看发生了什么并发送我的输入。现在,我被困在每个类如何与游戏活动沟通,以提供必须绘制的内容。如果可能的话,我不想在游戏类中插入Android绘图代码。我试图找到一种在我的活动和游戏类之间交换信息的方法,我想要一些建议。我是开发Android应用程序的新手,所以我不知道做这件事的所有技巧 以下是我的活动的片段:Java 类之间的Android消息,java,android,Java,Android,这是我的第一篇文章,我没有发现任何类似的东西,所以我决定问一下 我正在为Android开发一款扑克游戏来练习SDK并刷新/改进我的Java。这是一个简单的应用程序,控制德州扑克手 最初,我只使用JavaSE编写类,看起来不错。每个类都有自己的用途,并使用控制台输入/输出对其进行测试,我可以看出它确实有效:) 上周,我决定将它移植到Android上,通过图形界面查看发生的事情,所以我得到了资源图片,制作了一个活动,并包括了我的扑克包 在移植到Android之前,我可以放一个println(或rea
package my.poker.game;
//import stuff
public class ActivityHand extends Activity
{
private static Vector<Player> Players = new Vector<Player>();
public static final int MAX_PLAYERS = 8;
public static void startEmptyTable()
{
Players.removeAllElements();
Players.setSize(MAX_PLAYERS);
}
public static void LeaveTable(int pos)
{
Players.set(pos, null);
}
public static void SitTable(int pos, Player player)
{
Players.set(pos, player);
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
int cash = 1000;
startEmptyTable();
SitTable(0, new Jogador("William", cash));
SitTable(2, new Jogador("Richard", cash));
SitTable(4, new Jogador("John", cash));
SitTable(6, new Jogador("Paul", cash));
SitTable(8, new Jogador("Albert", cash));
//Start a Hand.... in future this will be a loop for each Hand
Hand hand = new Hand(Players);
}
}
在手工课里,当我想画一些东西的时候,我放了这个:
Handler handler = new Handler();
Message msg = new Message();
Bundle bundle = new Bundle();
bundle.putString("Key", "The Key's Value");
msg.setData(bundle);
handler.sendMessage(msg);
据我所知,这两个处理程序来自同一个线程,所以它们被分配到同一个MessageQueue,对吗?我认为当我在Hand类中发送消息时,Activity类可以在handleMessage方法中接收消息并处理我发送的任何消息,但handleMessage不会执行
我错过了什么
再次感谢您可以使用和系统在类之间进行通信
Lars Vogel的本教程将帮助您创建另一个类,以便与您自己的类和活动本身进行交互。 从该类中,您可以使用活动上下文来控制android活动。
使用处理程序和消息的方法很好,但需要修改游戏类 要调用活动中的方法,您需要将活动传递给此类 例如:
public class PokerActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
Hand hand = new Hand(this);
}
public void setVisibleHand(Player player)
{
<do something in the activity>
}
}
public class Hand
{
PokerActivity pokerActivity;
public Hand(PokerActivity activity)
{
this.pokerActivity = activity;
}
public void setVisibleHand()
{
pokerActivity.setVisibleHand(player1);
}
}
公共类扑克活动扩展活动
{
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
手牌=新牌(本);
}
公共无效设置VisibleHand(玩家)
{
}
}
公务生
{
扑克活动;
公众参与(扑克活动)
{
这个活动=活动;
}
公共无效设置VisibleHand()
{
扑克活动。设置可视手(玩家1);
}
}
现在,这可能不是最好的方法。在安卓系统中,你必须小心不要泄露上下文,否则你可能会在内存方面遇到麻烦。(简单地传递活动/上下文可能是最简单的方法,但也是泄漏上下文的最简单方法。)
我建议您先看一些简单的教程,了解android活动是如何工作的 也许你应该扩展View类来画手
这里似乎没有必要使用多线程,是吗?也许没有,但OP确实说了“练习SDK并刷新/改进我的Java”,这就是我建议的路线。我很确定,对于那些甚至没有使用正确的CAMELCASE的人来说,使用处理程序和多线程(在Android中)有点太难了。但事实上,这是一种选择。我觉得如果你打算做某事,你最好从一开始就做好。我不想告诉人们他们不能做什么。你必须将活动中创建的处理程序传递给手动构造函数。现在您正在Hand类中创建一个新的处理程序,它显然与您在activity中创建的处理程序不同。要从内部处理程序类访问活动方法,必须将活动传递给处理程序。看看我的例子。唯一的区别是您现在使用处理程序来访问活动,而不是直接访问活动。谢谢您的回答。如果我可以编写一个简单的代码来发送消息,那么修改游戏类不会被丢弃。我试试看。
public class PokerActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
Hand hand = new Hand(this);
}
public void setVisibleHand(Player player)
{
<do something in the activity>
}
}
public class Hand
{
PokerActivity pokerActivity;
public Hand(PokerActivity activity)
{
this.pokerActivity = activity;
}
public void setVisibleHand()
{
pokerActivity.setVisibleHand(player1);
}
}