2013年9月5日星期四

android development Caused by: java.lang.NullPointerException

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 more

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);
}
}
};
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);
}
}


------ Solution ------------------------------------- -------
films caused no data ,


    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);

}
    }

------ Solution ------------------------------------- -------
else {
films = filmService . getScrollData (30,10);
}
show ();
}
a problem here . . .
------ For reference only -------------------------------------- -
line 54 or 85 rows must have a variable is empty, so look at the code is very troublesome, 54 and 85 lines of code which specifically I do not see it ...... you have a good look at it, a null pointer exception solved the
------ For reference only ------------------------------------- -

I was not initialized in front of the Well
films = filmService.getScrollData (0,10);
------ For reference only -------------------- -------------------
then you have to check getScrollDat part code
------ For reference only -------- -------------------------------


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;
}

------ For reference only ----------------------------------- ----
this case recommended by the Log output detection Why films is null

For example, in
while (cursor.moveToNext ()) {
preceded by
Log.i ("test", " number of records :" + cursor.getCount ());
to detect the query results

will
button4.setOnClickListener (o);
behind
show ();
deleted, and then show (); put
else {
films = filmService . getScrollData (30,10);
}
code behind .

------ For reference only ---------------------------------- -----

Great God , I do as you say , a start on Showing 1-10 record , Click the button
But why it is not responding ?
------ For reference only -------------------------------------- -

in the show () inside
listView.setAdapter (adapter);
followed by a
listView.setSelection (0);
------ For reference only --------------------------- ------------
your original onClick event there is no plus show ();
inside the onClick
else {
films = filmService.getScrollData (30,10);
}
code followed by
show ();
------ For reference only ------------------------------ ---------

Great God , I added a show () , but does not work .
Do not listen for multiple buttons to set the same event do ? On certain score to write ?
------ For reference only -------------------------------------- -
current code Tieshanglai see
------ For reference only --------------------------- ------------

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);
}
}
}


------ For reference only -------------------- -------------------
you neither setId is called getId.
Each button will be added 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);
        }
    }
}



------ For reference only ----------------------------------- ----

Great God , does not seem like it, ,
That v.getId () is to get the currently clicked button id value ah, you are in front of each button setId ()
------ For reference only ------ ---------------------------------
Thank you, ah , the problem solved.
------ For reference only -------------------------------------- -
  The reply deleted by an administrator at 2013-08-20 14:30:22

------ For reference only ---------------------------------- -----
Hello , I am also learning android, development and you encounter the same problem : SimpleAdapter, NullPointerException encountered the problem that bothers me one day , and I ask you how to solve, code, and you almost the same ! Thank you !

没有评论:

发表评论