我正在开发一个高级顶点项目,我需要编写一个没有以前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);
感谢您的时间!
答案 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 中)