java - 指向 setonseekbarchangelistener 的 Nullpointerexception

标签 java android android-seekbar

我正在从事一个高级顶点项目,我需要在没有 Java 经验的情况下编写一个 Android 应用程序。上周我一直试图自己解决这个问题,但我很困惑,需要帮助。

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

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 行的空指针异常 SB1.setOnSeekBarChangeListener(this);

感谢您的宝贵时间!

最佳答案

您使用错误的布局作为 fragment_main 而不是 activity_main.xml。正如您在 Activity 中看到的:

setContentView(R.layout.activity_main);

您正在使用 activity_main 布局。而在您的 fragment 中:

inflater.inflate(R.layout.fragment_main, container, 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中)

关于java - 指向 setonseekbarchangelistener 的 Nullpointerexception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23070905/

相关文章:

java - 是否有任何选项可以停止应用分析器?

java - 使用 JSF 添加动态内容

java - Android 常量存放在哪里?

java - 如何在给定的不活动时间后隐藏 View

android - 将 SeekBar onProgressChanged 用于自定义 View

Android Seekbar 作为对话框

java - 格雷厄姆扫描的问题

Java aws sdk - 指定的位置约束无效(非亚马逊)

java - 反过来使用 Activity 之间的 Intent - Android

java - 我安装了 Android Studio,但无法通过命令行访问 gradle