Java 数组列表正确传输&为每个数组列表成员设置分数

Java 数组列表正确传输&为每个数组列表成员设置分数,java,android,arrays,button,Java,Android,Arrays,Button,感谢所有在其他问题上帮助我的人,谢谢。我几乎有了它,但最后两个问题阻止了它按我想要的方式工作 这两个类的作用如下。第一类获得想要玩游戏的人的名字。使用相同的编辑文本,输入名称时单击提交。提交所有姓名后,他们单击“完成/播放”按钮,该按钮将向下一个班级发送姓名和球员人数数据。在第1类中,我认为错误在于提交按钮。我正在尝试将所有名称添加到数组列表中,但我不认为它做得正确。当我运行该应用程序时,从用户的角度来看,它可以很好地接收名称。但是在下面的屏幕上,它应该显示它们的名称:它显示null,因此它没有

感谢所有在其他问题上帮助我的人,谢谢。我几乎有了它,但最后两个问题阻止了它按我想要的方式工作

这两个类的作用如下。第一类获得想要玩游戏的人的名字。使用相同的编辑文本,输入名称时单击提交。提交所有姓名后,他们单击“完成/播放”按钮,该按钮将向下一个班级发送姓名和球员人数数据。在第1类中,我认为错误在于提交按钮。我正在尝试将所有名称添加到数组列表中,但我不认为它做得正确。当我运行该应用程序时,从用户的角度来看,它可以很好地接收名称。但是在下面的屏幕上,它应该显示它们的名称:它显示null,因此它没有正确地获取名称,并且它正确地执行了一项任务

它需要做的最后一件事是在第2类上,它需要允许那些按钮失败,champ,而且还不错,只需要单击一次,然后它为轮到它的人的名字设置一个分数,然后它需要开始下一个人和任务。它既不是自动取款机也不是自动取款机。我真的很感激你能帮我把这该死的东西修好。感谢所有花时间回复的人。如果你讨厌看到我的帮助请求,我也很抱歉

第一类

public class Class1 extends Activity
{
    int players=0, i=0;
    String names[];

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.class1);

        final EditText input = (EditText) findViewById(R.id.nameinput);

        final ArrayList<String> names = new ArrayList<String>();
        //names = new String[players];

        Button submitButton = (Button) findViewById(R.id.submit_btn);
        submitButton.setOnClickListener(new View.OnClickListener()
        {
             public void onClick(View submit1)
             {
                //for( i=i; i < players; i++)
                //{
                    players++;
                    names.add(input.getText().toString());
                    //names[i] = input.getText().toString();
                    input.setText("");
                //}
             }
        });

        Button doneButton = (Button) findViewById(R.id.done_btn);
        doneButton.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View done1)
            {
                Intent done = new Intent(Class1.this, Game.class);
                Bundle bundle = new Bundle();
                bundle.putStringArrayList("arrayKey", names);

                done.putExtra("players", players);
                //done.putExtra("names", names[players]);
                startActivity(done);
            }
        });
    }
游戏课

public class Game extends Activity
{
    int players, counter=0, score, ptasks,rindex;
    String[] names;
    String[] tasks;
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.game);

        Bundle bundle = this.getIntent().getExtras();
        String[] names = bundle.getStringArray("arrayKey");

        Intent game = getIntent();
        players = game.getIntExtra("players", 1);
        //names = game.getStringArrayExtra("names");

        Random generator = new Random();

        tasks = new String[10];
        tasks[0]= "";
        tasks[1]= "";
        tasks[2]= "";
        tasks[3]= "";
        tasks[4]= "";
        tasks[5]= "";
        tasks[6]= "";
        tasks[7]= "";
        tasks[8]= "";
        tasks[9]= "";

        names = new String[players];

        while (counter <5)
        {
            for (int i = 0; i < players; i++)
            {
                TextView name1 = (TextView) findViewById(R.id.pname);
                name1.setText( names[i]+":");

                ptasks = 10;
                rindex = generator.nextInt(ptasks);

                TextView task = (TextView) findViewById(R.id.task);
                task.setText( tasks[rindex]);

                Button failButton = (Button) findViewById(R.id.fail_btn);
                failButton.setOnClickListener(new View.OnClickListener()
                {
                    public void onClick(View failed)
                    {
                        return;
                    }
                });

                Button notButton = (Button) findViewById(R.id.notbad_btn);
                notButton.setOnClickListener(new View.OnClickListener()
                {
                    public void onClick(View notbad)
                    {
                        return;
                    }
                });

                Button champButton = (Button) findViewById(R.id.champ_btn);
                champButton.setOnClickListener(new View.OnClickListener()
                {
                    public void onClick(View champp)
                    {
                        return;
                    }
                });

            }

            counter++;
        }
    }
}

作为旁注。你在那些旁边有//注释的部分中看到的东西我在那里,因为我在这些部分和那些没有注释的部分之间进行了测试,它们都不起作用。如果您对修复这些问题有任何意见,我将不胜感激。

我发现您的代码存在两个问题,这可能解释了为什么您在第二个活动中的玩家列表为空:

在游戏中,String[]name=bundle.getStringArrayArrayRayKey;应该是

ArrayList<String> names = bundle.getStringArrayList("arrayKey");`
请注意,您的代码更加混乱,因为您在不同的作用域中同时有一个字符串[]命名名称和一个ArrayList命名名称。决定其中一个,我会推荐这个清单,然后去掉另一个

此外,在游戏中,这是不必要的:

Bundle bundle = this.getIntent().getExtras();
String[] names = bundle.getStringArray("arrayKey");

Intent game = getIntent();
players = game.getIntExtra("players", 1);
在此之前,您已经拥有了捆绑包,因此您也可以执行以下操作:

Bundle bundle = this.getIntent().getExtras();
String[] names = bundle.getStringArray("arrayKey");
players = bundle.getInt("players", 1);
基本概念是,从调用活动开始,使用各种putExtra和putExtraXXX方法将信息放入意图中。在被调用的活动中,您可以通过以下两种方式获得输入到意图中的信息:

通过getExtras从Intent获取Bundle*,然后使用Bundle上的各种get方法获取放入的所有内容,而不是Intent。 直接调用Intent上的getExtraXXX方法。 对于第二部分,正如您的代码目前所示,它将立即在所有玩家上循环5次,我不理解计数器的用途

您应该做的是,只在按下3个按钮中的一个按钮时,执行所有处理,计算当前玩家的分数,增加玩家索引的值,设置下一个任务等。如果这将是一项长期任务,您可以禁用按钮直到完成,以便强制要求每个玩家只能按下一个按钮。当下一个播放机准备就绪时,重新启用按钮

我没有精力生产出你所需要的一切,但在一个起点上,把这个:

public void onCreate(Bundle savedInstanceState)
{
    //...other code here
    while (counter <5)
    {
        for (int i = 0; i < players; i++)
        {
            TextView name1 = (TextView) findViewById(R.id.pname);
            name1.setText( names[i]+":");

            ptasks = 10;
            rindex = generator.nextInt(ptasks);

            TextView task = (TextView) findViewById(R.id.task);
            task.setText( tasks[rindex]);

            Button failButton = (Button) findViewById(R.id.fail_btn);
            failButton.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View failed)
                {
                    return;
                }
            });

            Button notButton = (Button) findViewById(R.id.notbad_btn);
            notButton.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View notbad)
                {
                    return;
                }
            });

            Button champButton = (Button) findViewById(R.id.champ_btn);
            champButton.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View champp)
                {
                    return;
                }
            });

        }

        counter++;
    }
    //...other code here
}
进入


你还应该回到你之前的问题,选择合适的答案,并投票选出答案有用的用户。这是一个简单的手势和基本的礼貌,会让人们继续帮助你:
public void onCreate(Bundle savedInstanceState)
{
    //...other code here
    while (counter <5)
    {
        for (int i = 0; i < players; i++)
        {
            TextView name1 = (TextView) findViewById(R.id.pname);
            name1.setText( names[i]+":");

            ptasks = 10;
            rindex = generator.nextInt(ptasks);

            TextView task = (TextView) findViewById(R.id.task);
            task.setText( tasks[rindex]);

            Button failButton = (Button) findViewById(R.id.fail_btn);
            failButton.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View failed)
                {
                    return;
                }
            });

            Button notButton = (Button) findViewById(R.id.notbad_btn);
            notButton.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View notbad)
                {
                    return;
                }
            });

            Button champButton = (Button) findViewById(R.id.champ_btn);
            champButton.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View champp)
                {
                    return;
                }
            });

        }

        counter++;
    }
    //...other code here
}
public void onCreate(Bundle savedInstanceState)
{
    //...other code here
    int i = 0;
    TextView name1 = (TextView) findViewById(R.id.pname);
    TextView task = (TextView) findViewById(R.id.task);        

    Button failButton = (Button) findViewById(R.id.fail_btn);
    failButton.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View failed)
        {
            //do what must be done for the current player, calculate score, etc
            prepareNextPlayer(++i, names, name1, task);
        }
    });

    Button notButton = (Button) findViewById(R.id.notbad_btn);
    notButton.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View notbad)
        {
            //do what must be done for the current player, calculate score, etc
            prepareNextPlayer(++i, names, name1, task);
        }
    });

    Button champButton = (Button) findViewById(R.id.champ_btn);
    champButton.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View champp)
        {
            //do what must be done for the current player, calculate score, etc
            prepareNextPlayer(++i, names, name1, task);
        }
    });
    //...other code here
}

private void prepareNextPlayer(int i, ArrayList<String> names, String [] tasks, TextView nameField, TextView taskField)
{
        if(i >= names.size())
        {
            //all players have been processed, what happens now?
            return;
        }

        int rindex = generator.nextInt(10);
        nameField.setText( names.get(i)+":");
        task.setText( tasks[rindex]);
}