执行以下代码崩溃。 没有错误消息。
按下按钮后应打开Web.java
并创建键值。
MainActivity.java
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Spinner;
public class MainActivity extends Activity {
private Button btnGo;
final Spinner page = (Spinner)findViewById(R.id.txtPage);
String pageChoice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final SharedPreferences sharedPref =PreferenceManager.getDefaultSharedPreferences(this);
btnGo = (Button)findViewById(R.id.btnGo);
btnGo.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pageChoice = page.getSelectedItem().toString();
//Hopefully will allow for "global" url setting.
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("key1", pageChoice);
editor.commit();
startActivity(new Intent(MainActivity.this, Web.class));
}
});
}
}
答案 0 :(得分:1)
在final Spinner page = (Spinner)findViewById(R.id.txtPage);
陈述
setContentView(R.layout.activity_main);
查找具有给定ID的子视图。如果这个观点有给定的 id,返回此视图。因此,在类加载时,它会查找具有txtPage id的Spinner,但它不存在。所以你得到空值。你试图在onClick方法中获得的结果是NPE。
答案 1 :(得分:1)
这不应该是在类变量中:
final Spinner page = (Spinner)findViewById(R.id.txtPage);
这需要在onCreate()
方法内。在setContentView()
之后,作为方法变量。
findViewById()
使用上下文查找View,这需要有一个上下文(并且布局资源需要膨胀)。您只能在onCreate
执行中获取上下文,而不是在加载类时。