2014-04-14 34 views
1

我正在研究一個高級頂點項目,其中我需要編寫一個沒有以前的Java經驗的Android應用程序。我花了上個星期試圖自己弄清楚,但我很難過,需要幫助。Nullpointerexception指向setonseekbarchangelistener

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

}

這是我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> 

我得到一個NullPointerException手一指57 SB1.setOnSeekBarChangeListener(this);

謝謝您的時間!

回答

1

您使用錯誤的佈局作爲fragment_main而不是activity_main.xml。正如你可以在這裏看到你的活動:

的setContentView(R.layout.activity_main);

您正在使用activity_main佈局。而在你這裏的片段:

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

您使用fragment_main.xml

最簡單的辦法是複製/粘貼activity_main.xml裏面所有的fragment_main.xml元素。並刪除這些行:

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

其打電話給你Fragment並顯示它您FrameLayout(在activity_main.xml中)內

+0

感謝您的幫助,我想它現在。 –

相關問題