有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java编辑文本。getText()可能会产生NullPointerException

我的代码过去可以工作,但在添加另一个活动后,它停止了工作。Android Studio告诉我editText。getText()。toString()可能会产生空指针异常。这是工作,没有任何变化,它似乎已经打破

我尝试在onCreate()的最后初始化editText,但没有成功

活动:

package com.jbillote.lolstats.app;

import 安卓.content.Context;
import 安卓.os.StrictMode;
import 安卓.support.v7.app.ActionBarActivity;
import 安卓.os.Bundle;
import 安卓.view.Menu;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓.widget.*;
import 安卓.content.Intent;

import java.util.*;

import net.enigmablade.riotapi.RiotApi;
import net.enigmablade.riotapi.constants.*;
import net.enigmablade.riotapi.exceptions.*;
import net.enigmablade.riotapi.types.*;
import net.enigmablade.riotapi.types.League.Entry;

public class MainActivity extends ActionBarActivity
{
    public final static RiotApi api = new RiotApi("c90fafd0-b9da-45c8-8b8e-2fe506d0b8f6");
    private Summoner summoner;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
        //return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.

        switch(item.getItemId())
        {
            case(R.id.action_matchHistory):
                try
                {
                    Intent intent = new Intent(this, MatchHistory.class);
                    intent.putExtra("Summoner", summoner.getName());
                    startActivity(intent);
                    return true;
                }
                catch(RiotApiException e)
                {
                    return false;
                }
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    public void summonerSearch(View view)
    {
        EditText editText = (EditText) findViewById(R.id.summonerName);
        String summonerName = editText.getText().toString();

        TextView foundSummoner = (TextView) findViewById(R.id.foundSummoner);
        TextView rank = (TextView) findViewById(R.id.rank);
        TextView winloss = (TextView) findViewById(R.id.winloss);

        try
        {
            summoner = api.getSummoner(Region.NA, summonerName);

            Entry entry = summoner.getLeague(QueueType.RANKED_5V5_SOLO).getEntry(findPlayer(summoner));
            PlayerStats rankedSoloStats = rankedSoloStats(summoner);

            foundSummoner.setText(summoner.getName());
            rank.setText(playerRank(entry) + " " + entry.getLeaguePoints() + " LP");
            winloss.setText(rankedSoloStats.getWins() + "W " + rankedSoloStats.getLosses() + "L");
        }
        catch(RiotApiException e)
        {
            Context context = getApplicationContext();
            CharSequence text = "An error occured while searching for " + summonerName;
            int duration = Toast.LENGTH_SHORT;

            Toast.makeText(context, text, duration).show();
        }
    }

    private String findPlayer(Summoner summoner) throws RiotApiException
    {
        return summoner.getLeague(QueueType.RANKED_5V5_SOLO).getParticipantId();
    }

    private String playerRank(Entry entry)
    {
        String tierString;
        String rankString;

        switch(entry.getTier())
        {
            case TIER_BRONZE:
                tierString = "Bronze ";
                break;
            case TIER_SILVER:
                tierString = "Silver ";
                break;
            case TIER_GOLD:
                tierString = "Gold ";
                break;
            case TIER_PLATINUM:
                tierString = "Platinum ";
                break;
            case TIER_DIAMOND:
                tierString = "Diamond ";
                break;
            case TIER_CHALLENGER:
                tierString = "Challenger";
                break;
            default:
                tierString = "Unknown";
                break;
        }

        switch(entry.getRank())
        {
            case RANK_I:
                rankString = "I";
                break;
            case RANK_II:
                rankString = "II";
                break;
            case RANK_III:
                rankString = "III";
                break;
            case RANK_IV:
                rankString = "IV";
                break;
            case RANK_V:
                rankString = "V";
                break;
            default:
                rankString = "";
                break;
        }

        return tierString + rankString;
    }

    private PlayerStats rankedSoloStats(Summoner summoner) throws RiotApiException
    {
        List<PlayerStats> playerStats = api.getStatsApiMethod().getCurrentSeasonStatSummaries(Region.NA, summoner.getId());
        Iterator<PlayerStats> iterator = playerStats.iterator();

        while(iterator.hasNext())
        {
            PlayerStats temp = iterator.next();

            if(temp.getSummaryType().equals(QueueType.RANKED_5V5_SOLO))
            {
                return temp;
            }
        }

        // TODO Possibly find better solution
        return null;
    }
}

布局XML

<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:tools="http://schemas.安卓.com/tools"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    安卓:paddingLeft="@dimen/activity_horizontal_margin"
    安卓:paddingRight="@dimen/activity_horizontal_margin"
    安卓:paddingTop="@dimen/activity_vertical_margin"
    安卓:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.jbillote.lolstats.app.MainActivity">

    <EditText
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:id="@+id/summonerName"
        安卓:layout_alignParentTop="true"
        安卓:layout_alignParentLeft="true"
        安卓:layout_alignParentStart="true"
        安卓:layout_alignParentRight="true"
        安卓:layout_alignParentEnd="true"
        安卓:enabled="true"
        安卓:hint="Enter Summoner Name"
        安卓:textSize="20dp"
        安卓:singleLine="true"
        安卓:editable="true"/>

    <Button
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:text="Search"
        安卓:id="@+id/searchButton"
        安卓:layout_below="@+id/summonerName"
        安卓:layout_centerHorizontal="true"
        安卓:singleLine="false"
        安卓:onClick="summonerSearch"/>

    <TextView
        安卓:layout_width="fill_parent"
        安卓:layout_height="wrap_content"
        安卓:textAppearance="?安卓:attr/textAppearanceMedium"
        安卓:id="@+id/foundSummoner"
        安卓:layout_below="@+id/searchButton"
        安卓:layout_alignParentLeft="true"
        安卓:layout_alignParentStart="true"
        安卓:layout_alignRight="@+id/summonerName"
        安卓:layout_alignEnd="@+id/summonerName"
        安卓:textAlignment="center"
        安卓:gravity="center"/>

    <TextView
        安卓:layout_width="fill_parent"
        安卓:layout_height="wrap_content"
        安卓:textAppearance="?安卓:attr/textAppearanceSmall"
        安卓:id="@+id/rank"
        安卓:layout_below="@+id/foundSummoner"
        安卓:layout_alignParentLeft="true"
        安卓:layout_alignParentStart="true"
        安卓:layout_alignRight="@+id/foundSummoner"
        安卓:layout_alignEnd="@+id/foundSummoner"
        安卓:gravity="center"/>

    <TextView
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:textAppearance="?安卓:attr/textAppearanceSmall"
        安卓:id="@+id/winloss"
        安卓:layout_below="@+id/rank"
        安卓:layout_centerHorizontal="true"/>
</RelativeLayout>

共 (1) 个答案

  1. # 1 楼答案

    这不是错误,只是一个警告。静态分析器无法推断您的EditText或来自EditText.getText()的结果不是null。这里的关键词是“may”

    为两个实例添加一个(可能不必要的)null-检查将使警告消失