方法调用’fab.setOnClickListener(new View.OnClickListener(){@Override public void on …’可能会产生’java.lang.NullPointerException’

我使用min API 15在Android Studio 1.5.1中创建了新的Blank Activity项目

在此处输入图像描述

并在生成代码后我有这个警告/错误:

在pasteBin上

在此处输入图像描述

MainActivity.java中的代码:

package com.gamecodeschool.myapplication; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; public class MyActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_layout); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.my_menu, 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. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } 

content_my.xml中的代码:

     

my_layout.xml中的代码:

         

请告诉我如何解决这个问题及其发生的原因。 我是Android和Android Studio的新手。 以前我使用的是Apache Cordova。

只需检查/断言fab是否为空:

 if (fab != null) 

要么:

 assert fab != null; 

喜欢这个:

  FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); if (fab != null) fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); 
 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); 

在此行中,将onClicklistener实例作为setAction方法的第二个参数传递。

Snackbars可以包含通过setAction(CharSequence,android.view.View.OnClickListener)设置的动作。

像这样改变它

  Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", new View.OnClickListener() { @Override public void onClick(View v) { //whatever you want to do when "Action" is clicked in the SnackBar } }).show(); 

这个空指针是由Snackbar引起的,不是因为你的浮动按钮。 您需要在set Action方法中创建click侦听器的对象,而不是传递null。