Android app强制执行时关闭

时间:2015-04-23 03:46:25

标签: java android eclipse crash

执行以下代码崩溃。 没有错误消息。

按下按钮后应打开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));
            }
        });
    }
}

2 个答案:

答案 0 :(得分:1)

final Spinner page = (Spinner)findViewById(R.id.txtPage);陈述

之后加setContentView(R.layout.activity_main);

findViewById (int id)

  

查找具有给定ID的子视图。如果这个观点有给定的   id,返回此视图。因此,在类加载时,它会查找具有txtPage id的Spinner,但它不存在。所以你得到空值。你试图在onClick方法中获得的结果是NPE。

答案 1 :(得分:1)

这不应该是在类变量中:

final Spinner page = (Spinner)findViewById(R.id.txtPage);

这需要在onCreate()方法内。在setContentView()之后,作为方法变量。

findViewById()使用上下文查找View,这需要有一个上下文(并且布局资源需要膨胀)。您只能在onCreate执行中获取上下文,而不是在加载类时。