08-20 17:19:32.790: D/dalvikvm(938): GC_EXTERNAL_ALLOC freed 52K, 51% free 2686K/5379K, external 0K/0K, paused 397ms
08-20 17:19:33.200: D/AndroidRuntime(938): Shutting down VM
08-20 17:19:33.200: W/dalvikvm(938): threadid=1: thread exiting with uncaught exception (group=0x40020560)
08-20 17:19:33.210: E/AndroidRuntime(938): FATAL EXCEPTION: main
08-20 17:19:33.210: E/AndroidRuntime(938): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.suishoukan/com.example.suishoukan.MainActivity}: java.lang.NullPointerException
08-20 17:19:33.210: E/AndroidRuntime(938):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1834)
08-20 17:19:33.210: E/AndroidRuntime(938):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1850)
08-20 17:19:33.210: E/AndroidRuntime(938):  at android.app.ActivityThread.access$1500(ActivityThread.java:125)
08-20 17:19:33.210: E/AndroidRuntime(938):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:941)
08-20 17:19:33.210: E/AndroidRuntime(938):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-20 17:19:33.210: E/AndroidRuntime(938):  at android.os.Looper.loop(Looper.java:130)
08-20 17:19:33.210: E/AndroidRuntime(938):  at android.app.ActivityThread.main(ActivityThread.java:3962)
08-20 17:19:33.210: E/AndroidRuntime(938):  at java.lang.reflect.Method.invokeNative(Native Method)
08-20 17:19:33.210: E/AndroidRuntime(938):  at java.lang.reflect.Method.invoke(Method.java:507)
08-20 17:19:33.210: E/AndroidRuntime(938):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
08-20 17:19:33.210: E/AndroidRuntime(938):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
08-20 17:19:33.210: E/AndroidRuntime(938):  at dalvik.system.NativeStart.main(Native Method)
08-20 17:19:33.210: E/AndroidRuntime(938): Caused by: java.lang.NullPointerException
08-20 17:19:33.210: E/AndroidRuntime(938):  at com.example.suishoukan.MainActivity.show(MainActivity.java:85)
08-20 17:19:33.210: E/AndroidRuntime(938):  at com.example.suishoukan.MainActivity.onCreate(MainActivity.java:54)
08-20 17:19:33.210: E/AndroidRuntime(938):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-20 17:19:33.210: E/AndroidRuntime(938):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1788)
08-20 17:19:33.210: E/AndroidRuntime(938):  ... 11 morepackage com.example.suishoukan;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;import com.example.domain.Film;
import com.example.service.FilmService;
import com.example.test.FilmServiceTest;import android.app.TabActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;public class MainActivity extends TabActivity
{
//声明TabHost对象
TabHost mTabHost;
Button button1,button2,button3,button4;
FilmService filmService;
List<Film> films;
ListView listView;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//取得TabHost对象
mTabHost = getTabHost();
    
/* 为TabHost添加标签 */
//新建一个newTabSpec(newTabSpec)
//设置其标签和图标(setIndicator)
//设置内容(setContent)
    mTabHost.addTab(mTabHost.newTabSpec("tab_test1")
     .setIndicator("榜单")
     .setContent(R.id.textview1));
    mTabHost.addTab(mTabHost.newTabSpec("tab_test2")
     .setIndicator("节目表")
     .setContent(R.id.textview2));
    mTabHost.addTab(mTabHost.newTabSpec("tab_test3")
     .setIndicator("收藏")
     .setContent(R.id.textview3));
    //设置当前显示哪一个标签
    mTabHost.setCurrentTab(0);
    filmService = new FilmService(this);
    films = filmService.getScrollData(0,10);
    listView = (ListView) this.findViewById(R.id.listView) ;
    button1 = (Button) this.findViewById(R.id.button1);
    button2 = (Button) this.findViewById(R.id.button2);
    button3 = (Button) this.findViewById(R.id.button3);
    button4 = (Button) this.findViewById(R.id.button4);
    OnClickListener o = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(button1.getId()==v.getId()){
films = filmService.getScrollData(0,10);
}
else if(button2.getId()==v.getId()){
films = filmService.getScrollData(10,10);
}
else if(button3.getId()==v.getId()){
films = filmService.getScrollData(20,10);
}
else{
films = filmService.getScrollData(30,10);
}
}
};
button1.setOnClickListener(o);
button2.setOnClickListener(o);
button3.setOnClickListener(o);
button4.setOnClickListener(o);
    show();
}
private void show() {
// TODO Auto-generated method stub
List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();
for(Film film : films){
HashMap<String,Object> item = new HashMap<String,Object>();
item.put("title", film.getTitle());
item.put("score", film.getScore());
data.add(item);
}
SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item,
new String[]{"title","score"}, new int[]{R.id.title,R.id.score});
listView.setAdapter(adapter);
}
}

解决方案 »

  1.   

    films无数据导致的,
        private void show() {
            // TODO Auto-generated method stub
            if(films != null)
    {
            List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();
            for(Film film : films){
                HashMap<String,Object> item = new HashMap<String,Object>();
                item.put("title", film.getTitle());
                item.put("score", film.getScore());
                data.add(item);
            }
            SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item,
                    new String[]{"title","score"}, new int[]{R.id.title,R.id.score});
            listView.setAdapter(adapter);}
        }
      

  2.   

    我在前面不是初始化了嘛
    films = filmService.getScrollData(0,10);
      

  3.   

    那你得检查getScrollDat部份代码
      

  4.   


    public List<Film> getScrollData(int offset, int maxResult){
    List<Film> films = new ArrayList<Film>();
    SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
    Cursor cursor = db.rawQuery("select * from film order by filmid asc limit ?,?",
    new String[]{String.valueOf(offset), String.valueOf(maxResult)});
    while(cursor.moveToNext()){
    int filmid = cursor.getInt(cursor.getColumnIndex("filmid"));
    float score = cursor.getFloat(cursor.getColumnIndex("score"));
    String title = cursor.getString(cursor.getColumnIndex("title"));
    films.add(new Film(filmid, title,score));
    }
    cursor.close();
    return films;
    }
      

  5.   

    这种情况建议通过Log输出方式检测为什么films的值为null比如在
    while(cursor.moveToNext()){
    前面加上
    Log.i("test","记录数:" + cursor.getCount());
    来检测查询结果将
    button4.setOnClickListener(o);
    后面的
    show();
    删除掉,然后把show();放到
    else{
                        films = filmService.getScrollData(30,10);
                    }
    代码的后面。
      

  6.   


    在show()里面的
    listView.setAdapter(adapter);
    后面加上一句
    listView.setSelection(0);
      

  7.   

    你原来的onClick事件里面是没有加show();
    在onClick里面的
    else{
       films = filmService.getScrollData(30,10);
       }
    代码的后面加上
    show();
      

  8.   

    大神,我加了show()但还是不行。
    难道不能为多个按钮设置同一监听事件吗?一定得分开写?
      

  9.   


    package com.example.suishoukan;import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;import com.example.domain.Film;
    import com.example.service.FilmService;
    import com.example.test.FilmServiceTest;import android.app.TabActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.TabHost;
    import android.widget.TabHost.OnTabChangeListener;public class MainActivity extends TabActivity
    {
    //声明TabHost对象
    TabHost mTabHost;
    Button button1,button2,button3,button4;
    FilmService filmService;
    List<Film> films;
    ListView listView;
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //取得TabHost对象
    mTabHost = getTabHost();
        
    /* 为TabHost添加标签 */
    //新建一个newTabSpec(newTabSpec)
    //设置其标签和图标(setIndicator)
    //设置内容(setContent)
        mTabHost.addTab(mTabHost.newTabSpec("tab_test1")
         .setIndicator("榜单")
         .setContent(R.id.textview1));
        mTabHost.addTab(mTabHost.newTabSpec("tab_test2")
         .setIndicator("节目表")
         .setContent(R.id.textview2));
        mTabHost.addTab(mTabHost.newTabSpec("tab_test3")
         .setIndicator("收藏")
         .setContent(R.id.textview3));
        //设置当前显示哪一个标签
        mTabHost.setCurrentTab(0);
        filmService = new FilmService(this);
        //films = filmService.getScrollData(0,10);
        listView = (ListView) this.findViewById(R.id.listView) ;
        button1 = (Button) this.findViewById(R.id.button1);
        button2 = (Button) this.findViewById(R.id.button2);
        button3 = (Button) this.findViewById(R.id.button3);
        button4 = (Button) this.findViewById(R.id.button4);
        OnClickListener o = new OnClickListener() {
    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    if(button1.getId()==v.getId()){
    films = filmService.getScrollData(0,10);
    }
    else if(button2.getId()==v.getId()){
    films = filmService.getScrollData(10,10);
    }
    else if(button3.getId()==v.getId()){
    films = filmService.getScrollData(20,10);
    }
    else{
    films = filmService.getScrollData(30,10);
    }
    show();
    }
    };
    button1.setOnClickListener(o);
    button2.setOnClickListener(o);
    button3.setOnClickListener(o);
    button4.setOnClickListener(o);
    }
    private void show() {
    // TODO Auto-generated method stub
    if(films!=null){
    List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();
    for(Film film : films){
    HashMap<String,Object> item = new HashMap<String,Object>();
    item.put("title", film.getTitle());
    item.put("score", film.getScore());
    data.add(item);
    }
    SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item,
    new String[]{"title","score"}, new int[]{R.id.title,R.id.score});
    listView.setAdapter(adapter);
    listView.setSelection(0);
    }
    }
    }
      

  10.   

    你都未setId就调用getId。
    每个button都要加setId
    package com.example.suishoukan;import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;import com.example.domain.Film;
    import com.example.service.FilmService;
    import com.example.test.FilmServiceTest;import android.app.TabActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.TabHost;
    import android.widget.TabHost.OnTabChangeListener;public class MainActivity extends TabActivity
    {
        //声明TabHost对象
        TabHost mTabHost;
        Button button1,button2,button3,button4;
        FilmService filmService;
        List<Film> films;
        ListView listView;
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            //取得TabHost对象
            mTabHost = getTabHost();
            
            /* 为TabHost添加标签 */
            //新建一个newTabSpec(newTabSpec)
            //设置其标签和图标(setIndicator)
            //设置内容(setContent)
            mTabHost.addTab(mTabHost.newTabSpec("tab_test1")
                    .setIndicator("榜单")
                    .setContent(R.id.textview1));
            mTabHost.addTab(mTabHost.newTabSpec("tab_test2")
                    .setIndicator("节目表")
                    .setContent(R.id.textview2));
            mTabHost.addTab(mTabHost.newTabSpec("tab_test3")
                    .setIndicator("收藏")
                    .setContent(R.id.textview3));
            //设置当前显示哪一个标签
            mTabHost.setCurrentTab(0);
            filmService = new FilmService(this);
            //films = filmService.getScrollData(0,10);
            listView = (ListView) this.findViewById(R.id.listView) ;
            button1 = (Button) this.findViewById(R.id.button1);
            button1.setId(1);
            button2 = (Button) this.findViewById(R.id.button2);
            button2.setId(2);
            button3 = (Button) this.findViewById(R.id.button3);
            button3.setId(3);
            button4 = (Button) this.findViewById(R.id.button4);
            button4.setId(4);
            OnClickListener o = new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    if(button1.getId()==v.getId()){
                        films = filmService.getScrollData(0,10);
                    }
                    else if(button2.getId()==v.getId()){
                        films = filmService.getScrollData(10,10);
                    }
                    else if(button3.getId()==v.getId()){
                        films = filmService.getScrollData(20,10);
                    }
                    else{
                        films = filmService.getScrollData(30,10);
                    }
                    show();
                }
            };
            button1.setOnClickListener(o);
            button2.setOnClickListener(o);
            button3.setOnClickListener(o);
            button4.setOnClickListener(o);
        }
        private void show() {
            // TODO Auto-generated method stub
            if(films!=null){
            List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();
            for(Film film : films){
                HashMap<String,Object> item = new HashMap<String,Object>();
                item.put("title", film.getTitle());
                item.put("score", film.getScore());
                data.add(item);
            }
            SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item,
                    new String[]{"title","score"}, new int[]{R.id.title,R.id.score});
            listView.setAdapter(adapter);
            listView.setSelection(0);
            }
        }
    }
      

  11.   

    大神,好像不是这样的吧、、
    那个v.getId()是获取当前被点击的按钮的id值啊,你在前面为每个按钮setId()
      

  12.   

        else{
                        films = filmService.getScrollData(30,10);
                    }
                    show();
                }
    此处有问题
      

  13.   

    你好,我也是在学习android,开发中遇到和你一样的问题:SimpleAdapter,遇到NullPointerException的问题,困扰我一天了,请问你是怎么解决的,代码和你几乎一样!多谢!