Pergunta

I am working on a senior capstone project in which I need to write an android app with no previous java experience. I spent the last week trying to figure this out myself but I'm stumped and need help.

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

}

This is my 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>

I am getting a nullpointerexception pointing to line 57 SB1.setOnSeekBarChangeListener(this);

Thank you for your time!

Foi útil?

Solução

You use the wrong layout as fragment_main instead of activity_main.xml. As you can see here in your Activity:

setContentView(R.layout.activity_main);

You are using the activity_main layout. Whereas here in your fragment:

inflater.inflate(R.layout.fragment_main, container, false);

You use the fragment_main.xml

The simplest solution is to copy/paste all your fragment_main.xml elements inside the activity_main.xml. And remove these lines:

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

which call your Fragmentand display it inside your FrameLayout (in activity_main.xml)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top