【问题标题】:java.lang.RuntimeException: Unable to start activity ComponentInfo {...}: java.lang.NullPointerExceptionjava.lang.RuntimeException:无法启动活动 ComponentInfo {...}:java.lang.NullPointerException
【发布时间】:2014-03-06 20:44:04
【问题描述】:

当您单击以从一项活动转到另一项活动时,出现错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo {...}: java.lang.NullPointerException

我错过了一些方法?请帮助我了解我做错了什么,这就是您看到此错误的原因?

我的活动:Zaselenie.java

import java.util.ArrayList;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class Zaselenie extends Activity {

    ContactDBmoy cqh;
    KvartDB kdb;
    SQLiteDatabase sdb;

    private Long rowId;

    Spinner spZaselenie;

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

    spZaselenie  = (Spinner)findViewById(R.id.spZaselenie);

    // Инициализируем наш класс-обёртку
            cqh = new ContactDBmoy(Zaselenie.this);
            kdb = new KvartDB(Zaselenie.this);

            // База нам нужна для записи и чтения
            sdb = cqh.getWritableDatabase();
            sdb = kdb.getWritableDatabase();

            Bundle extras = getIntent().getExtras();
            rowId = extras.getLong(ContactMain.rowId);



            Cursor cursorKvart = sdb.query(KvartDB.TABLE_NAME, new String[] {
                    KvartDB._ID, KvartDB.NAME_COLUMN }, null, // The
                                                                    // columns
                                                                    // for the
                                                                    // WHERE
                                                                    // clause
                    null, // The values for the WHERE clause
                    null, // don't group the rows
                    null, // don't filter by row groups
                    null // The sort order
                    );


            ArrayList<String> labels = new ArrayList<String>();
            while (cursorKvart.moveToNext()) {
                // GET COLUMN INDICES + VALUES OF THOSE COLUMNS
                int idKvart = cursorKvart.getInt(cursorKvart.getColumnIndex(KvartDB._ID));
                String nameKvart = cursorKvart.getString(cursorKvart.getColumnIndex(KvartDB.NAME_COLUMN));
                Log.i("LOG_TAG", "ROW " + idKvart + " HAS NAME " + nameKvart);



                    labels.add(nameKvart);
                    // Creating adapter for spinner
                    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
                            android.R.layout.simple_spinner_item, labels);

                    // Drop down layout style - list view with radio button
                    dataAdapter
                            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    dataAdapter.notifyDataSetChanged();

                    // attaching data adapter to spinner
                    spZaselenie.setAdapter(dataAdapter);
            }
            cursorKvart.close();

    }

    public Zaselenie() {
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onResume() {
        super.onResume();

    }

    @Override
    protected void onStop() {
        super.onStop();
        // закрываем соединения с базой данных
        sdb.close();
        kdb.close();
    }
}

Logcat 错误:

03-06 12:04:43.802: E/AndroidRuntime(20861): FATAL EXCEPTION: main
03-06 12:04:43.802: E/AndroidRuntime(20861): java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.zloyel.manager_sutochnoy_arendy_1/ru.zloyel.manager_sutochnoy_arendy_1.Zaselenie}: java.lang.NullPointerException
03-06 12:04:43.802: E/AndroidRuntime(20861):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at android.app.ActivityThread.access$600(ActivityThread.java:130)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at android.os.Looper.loop(Looper.java:137)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at android.app.ActivityThread.main(ActivityThread.java:4745)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at java.lang.reflect.Method.invokeNative(Native Method)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at java.lang.reflect.Method.invoke(Method.java:511)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at dalvik.system.NativeStart.main(Native Method)
03-06 12:04:43.802: E/AndroidRuntime(20861): Caused by: java.lang.NullPointerException
03-06 12:04:43.802: E/AndroidRuntime(20861):    at ru.zloyel.manager_sutochnoy_arendy_1.Zaselenie.onCreate(Zaselenie.java:39)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at android.app.Activity.performCreate(Activity.java:5008)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
03-06 12:04:43.802: E/AndroidRuntime(20861):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
03-06 12:04:43.802: E/AndroidRuntime(20861):    ... 11 more

【问题讨论】:

  • 你的第 39 行是哪一行??
  • getExtras() 返回null
  • 您的问题可能出在 rowId = extras.getLong(ContactMain.rowId); 因为 getExtras() 为空。
  • @Zloyel 给给出答案的反馈。

标签: android nullpointerexception


【解决方案1】:

检查extras 不是null 如下...

if(extras != null) {
    rowId = extras.getLong(ContactMain.rowId);
}

还要检查您的 Cursor 对象是否不为空,如下所示...

if(cursorKvart != null && cursorKvart.getCount() > 0) {

    while (cursorKvart.moveToNext()) {

        ......

    }

}

【讨论】:

    【解决方案2】:

    首先检查您的rowId 不为空

    并且还在While() 循环之外设置你的ArrayAdapter

     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
                            android.R.layout.simple_spinner_item, labels);
    
     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    
     spZaselenie.setAdapter(dataAdapter);
    

    【讨论】:

      【解决方案3】:

      你应该在 dubug 模式下运行你的代码,然后你可以很容易地识别你在哪一行得到空指针。我认为这是找出异常和错误的最佳方法。

      【讨论】:

        猜你喜欢
        • 2014-05-10
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 2011-12-28
        • 2014-05-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多