来自getExtras()的NullPointerException

时间:2012-05-20 14:45:39

标签: android android-intent nullpointerexception bundle

我正在创建一个将数据从一个活动传输到另一个活动的意图,如下所示:

Intent intent = new Intent(this, ActivityHighScore.class);
    intent.putExtra("USERNAME", username);
    intent.putExtra("PLAYERMOVES", playerMoves);

    this.startActivity(intent);

然后我想检查活动开始时是否存在所有这些数据,因为它可以从其他来源启动而不设置此数据。我正在使用这个声明:

        Bundle bundle = getIntent().getExtras();

    if (!bundle.getString("USERNAME").equals(null) && bundle.getInt("PLAYERMOVES") != 0){
        String username = bundle.getString("USERNAME");
        int playerMoves = bundle.getInt("PLAYERMOVES");
        addHighScore(username, playerMoves);

    }   

但这导致了一个空的pointerexception,我完全确定如何。我以为我正在处理Strings和.equals(),但我认为......任何帮助都会非常感激。感谢。

3 个答案:

答案 0 :(得分:18)

替换

Bundle bundle = getIntent().getExtras();

    if (!bundle.getString("USERNAME").equals(null) && bundle.getInt("PLAYERMOVES") != 0){
        String username = bundle.getString("USERNAME");
        int playerMoves = bundle.getInt("PLAYERMOVES");
        addHighScore(username, playerMoves);

    } 

 if (getIntent().getStringExtra("USERNAME") != null && (getIntent().getIntExtra("PLAYERMOVES", 0) != 0){
        String username = bundle.getString("USERNAME");
        int playerMoves = bundle.getInt("PLAYERMOVES");
        addHighScore(username, playerMoves);

  } 

答案 1 :(得分:2)

好吧,我遇到了类似的问题。在我的情况下,当我检查NullPointerException是否等于bundle.getString()时发生null

以下是我解决它的方法,在我的情况下:

Intent intent = getIntent();        
if(intent.hasExtra("nomeUsuario")){
    bd = getIntent().getExtras();
    if(!bd.getString("nomeUsuario").equals(null)){
        nomeUsuario = bd.getString("nomeUsuario");
    }
}

答案 2 :(得分:-1)

您正在执行的方法是正确的。空指针异常即将发生,因为该片段未被正确的片段对象替换。  以下是工作代码活动类

Bundle bundle = new Bundle();
bundle.putString("message", "helloo");
Home tm = new Home();
tm.setArguments(bundle);
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frag,tm).commit();
getSupportActionBar().setTitle("Home");
item.setChecked(true);
drawerLayout.closeDrawers();

以片段

接收的代码
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    String myValue = getArguments().getString("message");
    Toast.makeText(getActivity(), myValue, Toast.LENGTH_SHORT).show();
    myview = inflater.inflate(R.layout.fragment_home, container, false);
    return myview;
}

请告诉我它是否有帮助!