【问题标题】:Unable to start activity ComponentInfo:java.lang.NullPointerException无法启动活动 ComponentInfo:java.lang.NullPointerException
【发布时间】:2013-12-29 11:00:36
【问题描述】:

这是我的代码当从 gridView 中单击时,我试图在单独的活动中显示来自 SQLite 数据库的列表视图。它没有按预期工作我找不到错误,我对此很陌生,应用程序强制关闭。错误是这样的

         12-29 20:36:37.954: D/dalvikvm(1948): Late-enabling CheckJNI
12-29 20:36:38.266: D/dalvikvm(1948): Debugger has detached; object registry had 1 entries
12-29 20:36:38.360: D/AbsListView(1948): Get MotionRecognitionManager
12-29 20:36:38.461: D/libEGL(1948): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
12-29 20:36:38.493: D/libEGL(1948): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
12-29 20:36:38.501: D/libEGL(1948): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
12-29 20:36:38.680: D/OpenGLRenderer(1948): Enabling debug mode 0
12-29 20:36:38.751: D/dalvikvm(1948): GC_CONCURRENT freed 121K, 9% free 7679K/8391K, paused 17ms+2ms, total 51ms
12-29 20:36:38.751: D/dalvikvm(1948): WAIT_FOR_CONCURRENT_GC blocked 23ms
12-29 20:36:38.868: D/dalvikvm(1948): GC_CONCURRENT freed 11K, 8% free 8119K/8775K, paused 12ms+3ms, total 43ms
12-29 20:36:39.024: D/dalvikvm(1948): GC_CONCURRENT freed 8K, 7% free 8603K/9223K, paused 12ms+12ms, total 63ms
12-29 20:36:39.079: I/Choreographer(1948): Skipped 41 frames!  The application may be doing too much work on its main thread.
12-29 20:36:54.188: D/AbsListView(1948): Get MotionRecognitionManager
12-29 20:36:54.297: D/AndroidRuntime(1948): Shutting down VM
12-29 20:36:54.297: W/dalvikvm(1948): threadid=1: thread exiting with uncaught exception (group=0x415662a0)
12-29 20:36:54.329: E/AndroidRuntime(1948): FATAL EXCEPTION: main
12-29 20:36:54.329: E/AndroidRuntime(1948): java.lang.NullPointerException
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.widget.AbsListView.obtainView(AbsListView.java:2467)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.widget.ListView.makeAndAddView(ListView.java:1769)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.widget.ListView.fillDown(ListView.java:672)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.widget.ListView.fillFromTop(ListView.java:733)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.widget.ListView.layoutChildren(ListView.java:1622)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.widget.AbsListView.onLayout(AbsListView.java:2300)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.View.layout(View.java:14061)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.ViewGroup.layout(ViewGroup.java:4376)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.widget.RelativeLayout.onLayout(RelativeLayout.java:948)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.View.layout(View.java:14061)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.ViewGroup.layout(ViewGroup.java:4376)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.View.layout(View.java:14061)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.ViewGroup.layout(ViewGroup.java:4376)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1426)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.View.layout(View.java:14061)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.ViewGroup.layout(ViewGroup.java:4376)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.View.layout(View.java:14061)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.ViewGroup.layout(ViewGroup.java:4376)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1986)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1807)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4464)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.Choreographer.doCallbacks(Choreographer.java:555)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.Choreographer.doFrame(Choreographer.java:525)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.os.Handler.handleCallback(Handler.java:615)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.os.Looper.loop(Looper.java:137)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at android.app.ActivityThread.main(ActivityThread.java:4895)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at java.lang.reflect.Method.invokeNative(Native Method)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at java.lang.reflect.Method.invoke(Method.java:511)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
12-29 20:36:54.329: E/AndroidRuntime(1948):     at dalvik.system.NativeStart.main(Native Method)

这是我生成错误的代码

JokeList.java

package com.try;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.SQLException;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.try.Utils.DataBaseHelper;
import com.try.Utils.SingleRow;

public class JokeList extends Activity
{
    int catId;
    String catName;
    /** Called when the activity is first created. */

    Button jokesCatButton;
    Button jokeFavButton;
    Button readButton;
    Button unReadButton;
    Button allButton;
    ListView listView;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_javalist);
        jokesCatButton = (Button) findViewById(R.id.jokeCatNameButton);
        jokeFavButton = (Button) findViewById(R.id.jokeFavButton);
        readButton = (Button) findViewById(R.id.readButton);
        unReadButton = (Button) findViewById(R.id.unReadButton);
        allButton = (Button) findViewById(R.id.allButton);
        Bundle localBundle = getIntent().getExtras();
        this.catId = localBundle.getInt("catId");
        this.catName = localBundle.getString("catName");
        listView = (ListView) findViewById(R.id.ListView01);
        jokesCatButton.setText(catName + " " + catId);
        jokesCatButton.setOnClickListener(new OnClickListener() {

            public void onClick(View v)
            {
                Toast.makeText(getApplicationContext(), " You clicked Joke Cat button", Toast.LENGTH_SHORT).show();
                // Intent intent = new
                // Intent(v.getContext(),JokeList.class);
                // startActivityForResult(intent, 0);

            }

        });
        jokeFavButton.setOnClickListener(new OnClickListener() {

            public void onClick(View v)
            {
                Toast.makeText(getApplicationContext(), " You Joke Fav DB button", Toast.LENGTH_SHORT).show();
                // Intent intent = new
                // Intent(v.getContext(),JokeList.class);
                // startActivityForResult(intent, 0);

            }

        });
        readButton.setOnClickListener(new OnClickListener() {

            public void onClick(View v)
            {
                Toast.makeText(getApplicationContext(), " You Read DB button", Toast.LENGTH_SHORT).show();
                // Intent intent = new
                // Intent(v.getContext(),JokeList.class);
                // startActivityForResult(intent, 0);

            }

        });
        unReadButton.setOnClickListener(new OnClickListener() {

            public void onClick(View v)
            {
                Toast.makeText(getApplicationContext(), " You unRead DB button", Toast.LENGTH_SHORT).show();
                // Intent intent = new
                // Intent(v.getContext(),JokeList.class);
                // startActivityForResult(intent, 0);

            }

        });
        allButton.setOnClickListener(new OnClickListener() {

            public void onClick(View v)
            {
                Toast.makeText(getApplicationContext(), " You allButton DB button", Toast.LENGTH_SHORT).show();
                // Intent intent = new
                // Intent(v.getContext(),JokeList.class);
                // startActivityForResult(intent, 0);

            }

        });
    listView.setAdapter(new RowView(this));
    }

}


class RowView extends BaseAdapter
{
    ArrayList<SingleRow> list;
DataBaseHelper myDbHelper;
JokeList jl;
int Position;

Context context;
    RowView(Context c)
    {       
            myDbHelper=new DataBaseHelper(c);
            jl=new JokeList();
        this.context=c;
        this.Position=jl.catId;
        list=myDbHelper.getCursor(Position);    
    }

    @Override
    public int getCount()
    {

        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public Object getItem(int i)
    {
        // TODO Auto-generated method stub
        return list.get(i);
    }

    @Override
    public long getItemId(int i)
    {
        // TODO Auto-generated method stub
        return i;
    }


    @Override
    public View getView(int i, View view, ViewGroup viewGroup)
    {
        SingleRow sr;
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row = inflater.inflate(R.layout.singlelist_cell, viewGroup, false);
        TextView title = (TextView) row.findViewById(R.id.TextView01);
        TextView description = (TextView) row.findViewById(R.id.TextView02);

        SingleRow temp = list.get(i);
        title.setText(temp.title);
        description.setText(temp.description);


        // TODO Auto-generated method stub
        return null;
    }

}

还请提出一些有效的方法来实施本准则。

【问题讨论】:

    标签: android sqlite listview gridview nullpointerexception


    【解决方案1】:

    RowView 中的myDbHelper 构造函数尚未初始化。

    同样在同一个构造函数中的jl.catId指的是尚未初始化的jl

    【讨论】:

    • 在构造函数 RowView(Context c) { this.context=context; 中初始化 myDbHelper 后仍然相同的错误this.myDbHelper=新的DataBaseHelper(c); this.Position=jl.catId; list=myDbHelper.getCursor(位置); }
    • 已更新 jL 已初始化但仍强制关闭... 新 Logcat 如上所示
    【解决方案2】:

    getView 方法返回值不应为空 应该是这样的:

    @Override
        public View getView(int i, View view, ViewGroup viewGroup)
        {
            SingleRow sr;
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View row = inflater.inflate(R.layout.singlelist_cell, viewGroup, false);
            TextView title = (TextView) row.findViewById(R.id.TextView01);
            TextView description = (TextView) row.findViewById(R.id.TextView02);
    
            SingleRow temp = list.get(i);
            title.setText(temp.title);
            description.setText(temp.description);
    
    
            // TODO Auto-generated method stub
            return row;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 2012-11-23
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多