Nullpointerexception指向setonseekbarchangelistener

时间:2014-04-14 21:36:13

标签: java android android-seekbar

我正在开发一个高级顶点项目,我需要编写一个没有以前java经验的Android应用程序。我花了最后一周试图弄清楚这一点,但我很难过,需要帮助。

我的MainActivity.java private static final String TAG =" Multispeaker&#34 ;;

private static final String DEVICE_ADDRESS = ">>ADDRESS HERE<<";

final int DELAY = 150;
SeekBar SB1;
SeekBar SB2;
SeekBar SB3;
SeekBar SB4;
TextView sbv1;
TextView sbv2;
TextView sbv3;
TextView sbv4;

int vol1, vol2, vol3, vol4;
long lastChange;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Amarino.connect(this, DEVICE_ADDRESS);

    SB1 = (SeekBar) findViewById(R.id.seekBar1);
    SB2 = (SeekBar) findViewById(R.id.seekBar2);
    SB3 = (SeekBar) findViewById(R.id.seekBar3);
    SB4 = (SeekBar) findViewById(R.id.seekBar4);
    sbv1 = (TextView) findViewById(R.id.textview1);
    sbv2 = (TextView) findViewById(R.id.textview2);
    sbv3 = (TextView) findViewById(R.id.textview3);
    sbv4 = (TextView) findViewById(R.id.textview4);


    SB1.setOnSeekBarChangeListener(this);
    SB2.setOnSeekBarChangeListener(this);
    SB3.setOnSeekBarChangeListener(this);
    SB4.setOnSeekBarChangeListener(this);



    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment())
                .commit();
    }
}

protected void onStart() {
    super.onStart();

    vol1 = 0;
    vol2 = 0;
    vol3 = 0;
    vol4 = 0;


    SB1.setProgress(vol1);
    SB2.setProgress(vol2);
    SB3.setProgress(vol3);
    SB4.setProgress(vol4);
    new Thread(){
        public void run(){
            try {
                Thread.sleep(6000);
            } catch (InterruptedException e) {}
            Log.d(TAG, "update colors");
            updateAllColors();
        }
    }.start();

}


@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 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();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);

        return rootView;
    }
}

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    switch (seekBar.getId()){
    case R.id.seekBar1:
        sbv1.setText(String.valueOf(progress));
        break;
    case R.id.seekBar2:
        sbv2.setText(String.valueOf(progress));
        break;
    case R.id.seekBar3:
        sbv3.setText(String.valueOf(progress));
        break;
    case R.id.seekBar4:
        sbv4.setText(String.valueOf(progress));
        break;
    }
    if (System.currentTimeMillis() - lastChange > DELAY ){
        updateState(seekBar);
        lastChange = System.currentTimeMillis();
    }
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
    lastChange = System.currentTimeMillis();
}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
    updateState(seekBar);
}

private void updateState(final SeekBar seekBar) {

    switch (seekBar.getId()){
    case R.id.seekBar1:
        vol1 = seekBar.getProgress();
        updateVol1();
        break;
    case R.id.seekBar2:
        vol1 = seekBar.getProgress();
        updateVol2();
        break;
    case R.id.seekBar3:
        vol1 = seekBar.getProgress();
        updateVol3();
        break;
    case R.id.seekBar4:
        vol1 = seekBar.getProgress();
        updateVol4();
        break;
    }
}

private void updateAllColors() {
    updateVol1();
    updateVol2();
    updateVol3();
    updateVol4();
}

private void updateVol1(){
    Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'x', vol1);
}

private void updateVol2(){
    Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'y', vol2);
}

private void updateVol3(){
    Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'z', vol3);
}

private void updateVol4(){
    Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'w', vol4);
}

}

这是我的fragment_main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <SeekBar
        android:id="@+id/seekBar1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:progress="0"
        android:max="255" />

    <TextView
        android:id="@+id/textview1"
        android:layout_width="53dp"
        android:layout_height="wrap_content" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <SeekBar
        android:id="@+id/seekBar2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:progress="0"
        android:max="255" />

    <TextView
        android:id="@+id/textview2"
        android:layout_width="53dp"
        android:layout_height="wrap_content" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <SeekBar
        android:id="@+id/seekBar3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:progress="0"
        android:max="255" />

    <TextView
        android:id="@+id/textview3"
        android:layout_width="53dp"
        android:layout_height="wrap_content" />

</LinearLayout>


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <SeekBar
        android:id="@+id/seekBar4"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:progress="0"
        android:max="255" />

    <TextView
        android:id="@+id/textview4"
        android:layout_width="53dp"
        android:layout_height="wrap_content" />

</LinearLayout>

我得到一个指向第57行的nullpointerexception     SB1.setOnSeekBarChangeListener(this);

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

您使用错误的布局fragment_main而不是activity_main.xml。正如您在活动中看到的那样:

  

的setContentView(的 R.layout.activity_main );

您正在使用activity_main布局。而在你的片段中:

  

inflater.inflate( R.layout.fragment_main ,容器,false);

您使用fragment_main.xml

最简单的解决方案是复制/粘贴fragment_main.xml内的所有activity_main.xml元素。并删除这些行:

if (savedInstanceState == null) {
    getSupportFragmentManager().beginTransaction()
            .add(R.id.container, new PlaceholderFragment())
            .commit();
}

调用您的Fragment并将其显示在FrameLayout内(在 activity_main.xml 中)