Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类之间的Android消息_Java_Android - Fatal编程技术网

Java 类之间的Android消息

Java 类之间的Android消息,java,android,Java,Android,这是我的第一篇文章,我没有发现任何类似的东西,所以我决定问一下 我正在为Android开发一款扑克游戏来练习SDK并刷新/改进我的Java。这是一个简单的应用程序,控制德州扑克手 最初,我只使用JavaSE编写类,看起来不错。每个类都有自己的用途,并使用控制台输入/输出对其进行测试,我可以看出它确实有效:) 上周,我决定将它移植到Android上,通过图形界面查看发生的事情,所以我得到了资源图片,制作了一个活动,并包括了我的扑克包 在移植到Android之前,我可以放一个println(或rea

这是我的第一篇文章,我没有发现任何类似的东西,所以我决定问一下

我正在为Android开发一款扑克游戏来练习SDK并刷新/改进我的Java。这是一个简单的应用程序,控制德州扑克手

最初,我只使用JavaSE编写类,看起来不错。每个类都有自己的用途,并使用控制台输入/输出对其进行测试,我可以看出它确实有效:)

上周,我决定将它移植到Android上,通过图形界面查看发生的事情,所以我得到了资源图片,制作了一个活动,并包括了我的扑克包

在移植到Android之前,我可以放一个println(或readLine)来查看发生了什么并发送我的输入。现在,我被困在每个类如何与游戏活动沟通,以提供必须绘制的内容。如果可能的话,我不想在游戏类中插入Android绘图代码。我试图找到一种在我的活动和游戏类之间交换信息的方法,我想要一些建议。我是开发Android应用程序的新手,所以我不知道做这件事的所有技巧

以下是我的活动的片段:

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);
      }
    }