gpt4 book ai didi

java - 指向 setonseekbarchangelistener 的 Nullpointerexception

转载 作者:行者123 更新时间:2023-11-30 02:57:16 29 4
gpt4 key购买 nike

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

我的 MainActivity.javaprivate 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com