Android 活动启动时出现运行时错误(活动关于listView)
此活动是从db.select接收值,然后我将一些值放入listview模型中显示 .我不知道如何修理。如果你想了解更多信息,请告诉我 这是初始化时我的运行时错误编辑Android 活动启动时出现运行时错误(活动关于listView),android,android-listview,runtime-error,Android,Android Listview,Runtime Error,此活动是从db.select接收值,然后我将一些值放入listview模型中显示 .我不知道如何修理。如果你想了解更多信息,请告诉我 这是初始化时我的运行时错误编辑 08-21 21:23:36.047: E/AndroidRuntime(408): FATAL EXCEPTION: main 08-21 21:23:36.047: E/AndroidRuntime(408): java.lang.RuntimeException: Unable to start activity Compon
08-21 21:23:36.047: E/AndroidRuntime(408): FATAL EXCEPTION: main
08-21 21:23:36.047: E/AndroidRuntime(408): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sqlite/com.example.sqlite.FriendsListActivity}: java.lang.NullPointerException
08-21 21:23:36.047: E/AndroidRuntime(408): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
08-21 21:23:36.047: E/AndroidRuntime(408): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-21 21:23:36.047: E/AndroidRuntime(408): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-21 21:23:36.047: E/AndroidRuntime(408): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-21 21:23:36.047: E/AndroidRuntime(408): at android.os.Handler.dispatchMessage(Handler.java:99)
08-21 21:23:36.047: E/AndroidRuntime(408): at android.os.Looper.loop(Looper.java:123)
08-21 21:23:36.047: E/AndroidRuntime(408): at android.app.ActivityThread.main(ActivityThread.java:3683)
08-21 21:23:36.047: E/AndroidRuntime(408): at java.lang.reflect.Method.invokeNative(Native Method)
08-21 21:23:36.047: E/AndroidRuntime(408): at java.lang.reflect.Method.invoke(Method.java:507)
08-21 21:23:36.047: E/AndroidRuntime(408): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-21 21:23:36.047: E/AndroidRuntime(408): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-21 21:23:36.047: E/AndroidRuntime(408): at dalvik.system.NativeStart.main(Native Method)
08-21 21:23:36.047: E/AndroidRuntime(408): Caused by: java.lang.NullPointerException
08-21 21:23:36.047: E/AndroidRuntime(408): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
08-21 21:23:36.047: E/AndroidRuntime(408): at com.example.sqlite.db.FriendsDB.<init>(FriendsDB.java:19)
08-21 21:23:36.047: E/AndroidRuntime(408): at com.example.sqlite.FriendsListActivity.onCreate(FriendsListActivity.java:34)
08-21 21:23:36.047: E/AndroidRuntime(408): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-21 21:23:36.047: E/AndroidRuntime(408): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
08-21 21:23:36.047: E/AndroidRuntime(408): ... 11 more
08-21:23:36.047:E/AndroidRuntime(408):致命异常:主
08-21 21:23:36.047:E/AndroidRuntime(408):java.lang.RuntimeException:无法启动活动组件信息{com.example.sqlite/com.example.sqlite.FriendsListativity}:java.lang.NullPointerException
08-21:23:36.047:E/AndroidRuntime(408):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
08-21:23:36.047:E/AndroidRuntime(408):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-21:23:36.047:E/AndroidRuntime(408):在android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-21:23:36.047:E/AndroidRuntime(408):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-21:23:36.047:E/AndroidRuntime(408):在android.os.Handler.dispatchMessage(Handler.java:99)上
08-21:23:36.047:E/AndroidRuntime(408):在android.os.Looper.loop(Looper.java:123)上
08-21:23:36.047:E/AndroidRuntime(408):在android.app.ActivityThread.main(ActivityThread.java:3683)上
08-21:23:36.047:E/AndroidRuntime(408):位于java.lang.reflect.Method.Invokenactive(本机方法)
08-21:23:36.047:E/AndroidRuntime(408):在java.lang.reflect.Method.invoke(Method.java:507)处
08-21:23:36.047:E/AndroidRuntime(408):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-21:23:36.047:E/AndroidRuntime(408):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-21:23:36.047:E/AndroidRuntime(408):在dalvik.system.NativeStart.main(本机方法)
08-21:23:36.047:E/AndroidRuntime(408):由以下原因引起:java.lang.NullPointerException
08-21:23:36.047:E/AndroidRuntime(408):在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
08-21:23:36.047:E/AndroidRuntime(408):在com.example.sqlite.db.FriendsDB.(FriendsDB.java:19)
08-21:23:36.047:E/AndroidRuntime(408):在com.example.sqlite.friendslistativity.onCreate(friendslistativity.java:34)
08-21:23:36.047:E/AndroidRuntime(408):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)上
08-21:23:36.047:E/AndroidRuntime(408):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)上
08-2121:23:36.047:E/AndroidRuntime(408):。。。还有11个
这是我的活动
package com.example.sqlite;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.sqlite.db.FriendsDB;
import com.example.sqlite.entry.FriendEntry;
public class FriendsListActivity extends Activity {
private Context context;
private FriendsDB db;
private ArrayList<FriendEntry> friends;
private TextView hellotext;
private ListView hellolistview;
ArrayList<HashMap<String, String>> MyArrList = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.friendlist_layout);
db = new FriendsDB(context);
friends = new ArrayList<FriendEntry>();
showAllList();
}
public void showAllList(){
//view matching
hellotext = (TextView) findViewById(R.id.hellotext);
hellolistview = (ListView) findViewById(R.id.hellolistview);
//select data
friends = db.selectAll();
if(friends.size()==0){
Toast.makeText(context,"You dont have any friend.",Toast.LENGTH_SHORT).show();
}else{
for (int i = 1;i<=friends.size();i++){
// set value for friends
map = new HashMap<String, String>();
map.put("item_nickname", friends.get(i).getNickname());
map.put("item_fname", friends.get(i).getFname());
map.put("item_lname", friends.get(i).getLname());
MyArrList.add(map);
Log.i("item_nickname", friends.get(i).getNickname());
Log.i("item_fname", friends.get(i).getFname());
Log.i("item_lname", friends.get(i).getLname());
}
//adapter
hellolistview.setAdapter(new adapter());
}
}
private class adapter extends BaseAdapter{
private Holder holder;
@Override
public int getCount() {
// TODO Auto-generated method stub
return friends.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
//create
if( view == null){
view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_layout,null);
holder = new Holder();
holder.nickname = (TextView) view.findViewById(R.id.item_nickname);
holder.fname = (TextView)view.findViewById(R.id.item_fname);
holder.lname = (TextView)view.findViewById(R.id.item_lname);
view.setTag(holder);
}else{
holder = (Holder) view.getTag();
}
//assign data / wait for data
holder.nickname.setText(map.get(position));
return view;
}
private class Holder{
public TextView nickname;
public TextView fname;
public TextView lname;
}
}
}
package com.example.sqlite;
导入java.util.ArrayList;
导入java.util.HashMap;
导入android.app.Activity;
导入android.content.Context;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.example.sqlite.db.FriendsDB;
导入com.example.sqlite.entry.FriendEntry;
公共类友谊活动扩展活动{
私人语境;
私人友谊数据库;
私人ArrayList朋友;
私有文本视图hellotext;
私有列表视图hellolistview;
ArrayList MyArrList=新建ArrayList();
HashMap图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.friendlist_布局);
db=新朋友db(上下文);
friends=newarraylist();
showAllList();
}
public void showallist(){
//视图匹配
hellotext=(TextView)findViewById(R.id.hellotext);
hellolistview=(ListView)findViewById(R.id.hellolistview);
//选择数据
friends=db.selectAll();
if(friends.size()==0){
Toast.makeText(上下文,“你没有任何朋友”,Toast.LENGTH_SHORT.show();
}否则{
对于(inti=1;iArrayList-friends;
私人友谊数据库;
请初始化它由于NullPointerException,活动无法启动
原因:java.lang.NullPointerException
08-21 16:15:06.771:E/AndroidRuntime(536):在com.example.sqlite.FriendsListativity.showAllList(FriendsListativity.java:41)
因此,在第41行,导致NPE的可能组件可能是friends.get(i).getFname()
请调试线路
map.put("item_fname", friends.get(i).getFname());
请确保以这种方式初始化ArrayList和DB
public class FriendsListActivity extends Activity
{
private Context context;
private FriendsDB db;
private ArrayList<FriendEntry> friends;
private TextView hellotext;
private ListView hellolistview;
ArrayList<HashMap<String, String>> MyArrList = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.friendlist_layout);
**friends=new ArrayList<FriendEntry>;
db=new FriendsDB(FriendsListActivity.this);
db.getReadableDatabse();** // For reading sqlite database
showAllList();
}
公共类FriendsStactivity扩展了活动
{
私人语境;
私人友谊数据库;
私人ArrayList朋友;
私有文本视图hellotext;
私有列表视图hellolistview;
ArrayList MyArrList=新建ArrayList();
HashMap图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.friendlist_布局);
**朋友=新ArrayList;
db=新朋友db(FriendsListActivity.this);
db.getReadableDatabase();**//用于读取sqlite数据库
showAllList();
}
db未初始化,因此NPE。我看不到context
也正在初始化。您正在使用它来显示Toast
。Thanapom确实尝试初始化(或者更确切地说,向提供值)friends
。但是需要初始化的是db
。这应该是一个注释。我希望代码没有更改,因为第41行指向上面提到的行。顺便说一句@kalyanpvs和其他人说的是真的,我也没有看到在使用db=new FriendsDB(context);friends=new ArrayList()之前给db一个值;仍然是错误。是否要在Logcat中看到错误??在此db=new FriendsDB(上下文)之后;添加此行..db.getWritableDatabase();您能告诉我为什么这样做吗
public class FriendsListActivity extends Activity
{
private Context context;
private FriendsDB db;
private ArrayList<FriendEntry> friends;
private TextView hellotext;
private ListView hellolistview;
ArrayList<HashMap<String, String>> MyArrList = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.friendlist_layout);
**friends=new ArrayList<FriendEntry>;
db=new FriendsDB(FriendsListActivity.this);
db.getReadableDatabse();** // For reading sqlite database
showAllList();
}