Java Android Studio SeekBar错误

Java Android Studio SeekBar错误,java,android,Java,Android,您好,我正在尝试获取android studio中SeekBar的值。如果我运行应用程序,它将崩溃。没有语法错误 package prosis.guiaturistico; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.SeekBar;

您好,我正在尝试获取android studio中SeekBar的值。如果我运行应用程序,它将崩溃。没有语法错误

package prosis.guiaturistico;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity  {

private static SeekBar seek_bar;
private static TextView text_view;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    seekbar();
}

public void seekbar(){
    seek_bar = (SeekBar)findViewById(R.id.seekbar);
    text_view = (TextView)findViewById(R.id.seekbarValue);
    text_view.setText("Covered : " + seek_bar.getProgress() + " / " +seek_bar.getMax());

    seek_bar.setOnSeekBarChangeListener(
            new SeekBar.OnSeekBarChangeListener(){
                int progress_value;
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                    progress_value = progress;
                    text_view.setText("Covered : " + progress + " / " +seek_bar.getMax());
                    Toast.makeText(MainActivity.this,"SeekBar in progress",Toast.LENGTH_LONG).show();
                }

                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {

                    Toast.makeText(MainActivity.this,"SeekBar in start",Toast.LENGTH_LONG).show();
                }

                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {
                    text_view.setText("Covered : " + progress_value + " / " +seek_bar.getMax());

                    Toast.makeText(MainActivity.this,"SeekBar in stop",Toast.LENGTH_LONG).show();
                }
            }
    );
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.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();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

这是我的布局

<SeekBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/seekbar"
android:layout_above="@+id/bt_pes"
android:layout_alignParentStart="true"
android:layout_alignEnd="@+id/bt_mon"
android:max="5000" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Small Text"
android:id="@+id/seekbarValue"
android:layout_above="@+id/seekbar"
android:layout_below="@+id/bt_caf"
android:layout_alignEnd="@+id/bt_pes"    
android:layout_alignStart="@+id/bt_pes" />

问题在于这行:

text_view.setText("Covered : " + seek_bar.getProgress() + " / " +seek_bar.getMax());
seek\u bar.getProgress()
seek\u bar.getMax()
返回原语
int
值。
TextView.setText()
方法倾向于将原语
int
值假定为资源ID


要避免这种情况,请使用
String.valueof()
将基本值转换为字符串表示形式。或者更好的方法是使用字符串连接,而不是普通的字符串连接。

尽管seek_bar.getProgress()等返回int,但作为一个整体,上面setText()的参数无论如何都会转换为字符串,与例如String s=“x=+10;”中的转换方式完全相同;,其计算结果为字符串“x=10”;此外,“由以下原因引起:java.lang.NullPointerException:试图在空对象引用上调用虚拟方法'int-android.widget.SeekBar.getProgress()'表明真正的问题是seek_栏为空。乍一看似乎是这样,但错误消息具有误导性。根据OP提供的信息,seek_bar不可能为空。是的,setText()应该将所有内容转换为字符串,但在许多情况下不会,这就是为什么Android Studio项目在默认情况下在执行setText时在编辑器中抛出错误(10)。这里真正的问题是在StringBuilder上使用纯字符串连接。这就是为什么我的解决方案解决了OP的问题。所以,请在否决一个答案之前做一些研究。你可能会学到一些新东西!非常感谢你,我的朋友。。。我的程序现在运行良好:)“这是我的布局”-显然,这只是布局文件的一部分。你能把全部都贴出来吗。另外,确保seekbar是在activity_main.xml布局文件中定义的。
text_view.setText("Covered : " + seek_bar.getProgress() + " / " +seek_bar.getMax());