Android 通过Intent从ViewHolder获取团队代码

Android 通过Intent从ViewHolder获取团队代码,android,android-intent,android-viewholder,Android,Android Intent,Android Viewholder,当我在viewHolder中单击联赛表格中的特定球队时,我试图获取每个英超球队的球队代码。我已经成功地将团队名称和团队位置通过意图从一个活动发送到另一个活动。我已将团队代码硬编码到my Configs类中的每个团队 我不确定如何着手修复这个错误 public static int getCodeFromName(String teamname) { switch (teamname) { case "Arsenal FC":

当我在viewHolder中单击联赛表格中的特定球队时,我试图获取每个英超球队的球队代码。我已经成功地将团队名称和团队位置通过意图从一个活动发送到另一个活动。我已将团队代码硬编码到my Configs类中的每个团队

我不确定如何着手修复这个错误

public static int getCodeFromName(String teamname) {
        switch (teamname) {
            case "Arsenal FC":
                return 57;
            case "AFC Bournemouth":
                return 1044;
            case "Burnley FC":
                return 328;
            case "Chelsea FC":
                return 61;
            case "Crystal Palace FC":
                return 354;
            case "Hull City FC":
                return 322;
            case "Liverpool FC":
                return 164;
            case "Manchester City FC":
                return 65;
            case "Manchester United FC":
                return 66;
            case "Middlesbrough FC":
                return 343;
            case "Southampton FC":
                return 340;
            case "Swansea City":
                return 72;
            case "Leicester City FC":
                return 338;
            case "Everton FC":
                return 62;
            case "West Ham United FC":
                return 563;
            case "Tottenham Hotspur FC":
                return 73;
            case "Watford FC":
                return 346;
            case "West Bromwich Albion FC":
                return 74;
            case "Sunderland AFC":
                return 71;
            case "Stoke City FC":
                return 70;
            default:
                return 0;
        }
    }
下面是我的OnClick方法,它适用于其他两个意图(teamName、position)

最后,在我的活动课上

int teamCode = Integer.parseInt(getIntent().getStringExtra("teamCode")); //ERROR OCCURS HERE

String PlayersURL = "http://api.football-data.org/v1/teams/" + teamCode + "/players";

final String teamName = getIntent().getStringExtra("teamName");
String teamPosition = getIntent().getStringExtra("position");


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.team_overview);


    rv = (RecyclerView) findViewById(R.id.rv);
    if (rv != null) {
        rv.setLayoutManager(new LinearLayoutManager(this));
    }


    teamNameTV = (TextView) findViewById(R.id.teamNameTV);
    teamNameTV.setText("Name: " + teamName);

    teamPositionTV = (TextView) findViewById(R.id.teamPositionTV);
    teamPositionTV.setText("Position : " + teamPosition);


    button_players = (Button) findViewById(R.id.button_players);
    button_players.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new PlayerDataDownloader(DetailActivity.this, PlayersURL, rv).execute();
        }
    });
错误代码:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
                                                                                         at com.example.oisin.premierleaguesocial.activities.DetailActivity.<init>(DetailActivity.java:26)
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.content.Intent.getStringExtra(java.lang.String)”
在com.example.oisin.PremierLeagueCocial.activities.DetailActivity.(DetailActivity.java:26)

错误表示您正在对空对象引用调用
Intent.getStringExtra(java.lang.String)
。查看发生错误的代码

int teamCode = Integer.parseInt(getIntent().getStringExtra("teamCode"));
正在对
getIntent()
的返回值调用
getStringExtra()
。这意味着
getIntent()
返回null

此调用发生在任何方法之外的字段初始值设定项中。这意味着它在DetailActivity的构造函数之前被调用(尽管在超类活动的构造函数之后)

更重要的是,s的文档说“返回开始这项活动的意图。”但“开始”可以是一个术语。如果您查看生命周期图,您可以看到启动发生在创建活动之后(活动对象实例化之后)。一个活动可以由不同的意图多次启动,甚至创建,而无需多次实例化其对象。(第一次启动时,它将首先被创建,这是必然的。)因此,虽然不明显,但在创建之前“启动此活动的意图”可能不可用,即使超类活动已被实例化,这是有一定道理的


将此初始化代码移到
onCreate()
,这是大多数活动设置代码应该去的地方。然后您可以确信活动已经实例化,超类
onCreate()
已经完成,并且应该有返回
getIntent()
的意图。

错误表明您正在对空对象引用调用
intent.getStringExtra(java.lang.String)
。查看发生错误的代码

int teamCode = Integer.parseInt(getIntent().getStringExtra("teamCode"));
正在对
getIntent()
的返回值调用
getStringExtra()
。这意味着
getIntent()
返回null

此调用发生在任何方法之外的字段初始值设定项中。这意味着它在DetailActivity的构造函数之前被调用(尽管在超类活动的构造函数之后)

更重要的是,s的文档说“返回开始这项活动的意图。”但“开始”可以是一个术语。如果您查看生命周期图,您可以看到启动发生在创建活动之后(活动对象实例化之后)。一个活动可以由不同的意图多次启动,甚至创建,而无需多次实例化其对象。(第一次启动时,它将首先被创建,这是必然的。)因此,虽然不明显,但在创建之前“启动此活动的意图”可能不可用,即使超类活动已被实例化,这是有一定道理的

将此初始化代码移到
onCreate()
,这是大多数活动设置代码应该去的地方。然后您可以确信活动已经实例化,超类
onCreate()
已经完成,并且应该有返回
getIntent()
的意图。

@OP-see也@OP-see也