2016-05-05 2 views
0

Я начинаю андроид. Это код, который я копирую из книги. Но когда я загружаю и запускаю на своем смартфоне, возникает NullPointerException.NullPointerException setOnClickListner

Информация о исключении, как показано ниже:

java.lang.NullPointerExcption: Попытка вызвать виртуальную method'void android.widget.Button.setOnClickListner на нулевой ссылку на объект в ....

это часть моего кода:

public class MainActivity extends AppCompatActivity { 

    Button btn1 , btn2; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // requestWindowFeature(Window.FEATURE_PROGRESS); 
     requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
     btn1 = (Button) findViewById(R.id.btn1); 
     btn2 = (Button) findViewById(R.id.btn2); 
     btn1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       setProgressBarIndeterminateVisibility(true); 
       setProgressBarVisibility(true); 
       setProgress(4500); 
      } 
     }); 
     btn2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       setProgressBarIndeterminateVisibility(false); 
       setProgressBarVisibility(false); 
      } 
     }); 
     setContentView(R.layout.activity_main); 

     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(); 
      } 
     }); 
    } 

А вот XML файл:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.neoncowboy.titleprogressbar.MainActivity" 
    tools:showIn="@layout/activity_main" 
    android:orientation="horizontal"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="显示" 
     android:id="@+id/btn1" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="隐藏" 
     android:id="@+id/btn2" /> 

</LinearLayout> 
+0

Книга сделал это неправильно, если вы скопировали, что дословно. –

ответ

2

setContentView() линия должна быть до findViewById() линий.

2

Перед добавлением кликов listeres вам необходимо указать setContentView(R.layout.activity_main);.

public class MainActivity extends AppCompatActivity { 

Button btn1 , btn2; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // requestWindowFeature(Window.FEATURE_PROGRESS); 
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
    setContentView(R.layout.activity_main); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    btn1 = (Button) findViewById(R.id.btn1); 
    btn2 = (Button) findViewById(R.id.btn2); 
    btn1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      setProgressBarIndeterminateVisibility(true); 
      setProgressBarVisibility(true); 
      setProgress(4500); 
     } 
    }); 
    btn2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      setProgressBarIndeterminateVisibility(false); 
      setProgressBarVisibility(false); 
     } 
    }); 


    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(); 
     } 
    }); 
} 
0

вы должны подключить макет XML к классу активности с помощью setContentView(R.layout.yourXmlFileName); после этой строки: super.onCreate(savedInstanceState);