Java android rss阅读器应用程序的空指针异常
我是在遵循一个教程位于它的两个部分的链接到第二个是在第一个底部。我输入了所有代码,然后试图编译它,但我一直收到由以下原因引起的错误:java.lang.NullPointerException 位于bsu.edu.cs339.nbanews.MainActivity.onCreate(MainActivity.java:52),这是这行代码 lv.setOnItemClickListener(新的OnItemClickListener(){ 这个项目非常庞大,有9个类和9个不同的xml文件,所以我没有包含它们,但url确实包含了教程中的所有这些类。出于好奇,我粘贴了他的代码,认为可能是我键入了一些错误,但在同一行上也出现了同样的错误Java android rss阅读器应用程序的空指针异常,java,android,rss,Java,Android,Rss,我是在遵循一个教程位于它的两个部分的链接到第二个是在第一个底部。我输入了所有代码,然后试图编译它,但我一直收到由以下原因引起的错误:java.lang.NullPointerException 位于bsu.edu.cs339.nbanews.MainActivity.onCreate(MainActivity.java:52),这是这行代码 lv.setOnItemClickListener(新的OnItemClickListener(){ 这个项目非常庞大,有9个类和9个不同的xml文件,所以
public class MainActivity extends Activity {
private ProgressDialog pDialog;
ArrayList<HashMap<String, String>> rssFeedList;
RSSParser rssParser = new RSSParser();
RSSFeed rssFeed;
ImageButton btnAddSite;
String[] sqliteIds;
public static String TAG_ID = "id";
public static String TAG_TITLE = "title";
public static String TAG_LINK = "link";
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.site_list);
btnAddSite = (ImageButton) findViewById(R.id.btnAddSite);
rssFeedList = new ArrayList<HashMap<String, String>>();
new loadStoreSites().execute();
lv = (ListView) findViewById(R.id.list);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String sqlite_id = ((TextView) view.findViewById(R.id.
sqlite_id)).getText().toString();
Intent in = new Intent(getApplicationContext(),
ListRssItemsActivity.class);
in.putExtra(TAG_ID, sqlite_id);
startActivity(in);
}
});
btnAddSite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(),
AddNewSiteActivity.class);
startActivityForResult(i, 100);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 100) {
Intent intent = getIntent();
finish();
startActivity(intent);
}
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo
menuInfo) {
if (v.getId()==R.id.list) {
menu.setHeaderTitle("Delete");
menu.add(Menu.NONE, 0, 0, "Delete Feed");
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)
item.getMenuInfo();
int menuItemIndex = item.getItemId();
if(menuItemIndex == 0){
RSSDatabaseHandler rssDb = new RSSDatabaseHandler(getApplicationContext());
WebSite site = new WebSite();
site.setId(Integer.parseInt(sqliteIds[info.position]));
rssDb.deleteSite(site);
Intent intent = getIntent();
finish();
startActivity(intent);
}
return true;
}
class loadStoreSites extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(
MainActivity.this);
pDialog.setMessage("Loading websites ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected String doInBackground(String... args) {
runOnUiThread(new Runnable() {
public void run() {
RSSDatabaseHandler rssDb = new RSSDatabaseHandler(
getApplicationContext());
List<WebSite> siteList = rssDb.getAllSites();
sqliteIds = new String[siteList.size()];
for (int i = 0; i < siteList.size(); i++) {
WebSite s = siteList.get(i);
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_ID, s.getId().toString());
map.put(TAG_TITLE, s.getTitle().toString());
map.put(TAG_LINK, s.getLink().toString());
rssFeedList.add(map);
sqliteIds[i] = s.getId().toString();
}
ListAdapter adapter = new SimpleAdapter(
MainActivity.this,
rssFeedList, R.layout.site_list_row,
new String[] { TAG_ID, TAG_TITLE, TAG_LINK },
new int[] { R.id.sqlite_id, R.id.title, R.id.link });
lv.setAdapter(adapter);
registerForContextMenu(lv);
}
});
return null;
}
protected void onPostExecute(String args) {
pDialog.dismiss();
}
}
}
公共类MainActivity扩展活动{
私人对话;
ArrayList rssFeedList;
RSSParser RSSParser=新的RSSParser();
RSSFeed RSSFeed;
图像按钮btnAddSite;
字符串[]sqliteid;
公共静态字符串标记\u ID=“ID”;
公共静态字符串TAG_TITLE=“TITLE”;
公共静态字符串TAG_LINK=“LINK”;
ListView lv;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.site_列表);
btnAddSite=(ImageButton)findViewById(R.id.btnAddSite);
rssFeedList=newarraylist();
新建loadStoreSites().execute();
lv=(ListView)findViewById(R.id.list);
lv.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
字符串sqlite_id=((TextView)view.findViewById(R.id)。
sqlite_id)).getText().toString();
Intent in=新的Intent(getApplicationContext(),
ListRSSitemActivity.class);
in.putExtra(TAG_ID,sqlite_ID);
星触觉(in);
}
});
btnAddSite.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意图i=新意图(getApplicationContext(),
AddNewSiteActivity.class);
startActivityForResult(i,100);
}
});
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
如果(结果代码==100){
Intent=getIntent();
完成();
星触觉(意向);
}
}
@凌驾
public void onCreateContextMenu(ContextMenu菜单,视图v,ContextMenuInfo
menuInfo){
if(v.getId()==R.id.list){
菜单。设置标题(“删除”);
menu.add(menu.NONE,0,0,“删除提要”);
}
}
@凌驾
公共布尔值onContextItemSelected(MenuItem项){
AdapterView.AdapterContextMenuInfo信息=(AdapterView.AdapterContextMenuInfo)
item.getMenuInfo();
int menuItemIndex=item.getItemId();
如果(menuItemIndex==0){
RSSDatabaseHandler rssDb=新的RSSDatabaseHandler(getApplicationContext());
网站站点=新网站();
site.setId(Integer.parseInt(sqliteIds[info.position]);
rssDb.删除站点(站点);
Intent=getIntent();
完成();
星触觉(意向);
}
返回true;
}
类loadStoreSites扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=新建进度对话框(
主要活动(本);
setMessage(“加载网站…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(假);
pDialog.show();
}
受保护的字符串doInBackground(字符串…args){
runOnUiThread(新的Runnable(){
公开募捐{
RSSDatabaseHandler rssDb=新的RSSDatabaseHandler(
getApplicationContext());
List siteList=rssDb.getAllSites();
sqliteIds=新字符串[siteList.size()];
对于(int i=0;i
确保您的活动\u main.xml
包含以下内容:
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
.................
..........
...... >
</ListView>
在
lv.setAdapter(adapter)
之后执行onPostExecute
并调用adapter.notifyDataSetChanged()
在activity\u main.xml
中是否有ListView
和list
id?检查父类是否为activity
,getListView()
存在于ListActivity
,谢谢@shayanpourvatan.Modified。本以为它是ListActivity
。activity\u main类从未接触过rss\u list\u项在您的代码中有listview和listview,您有setContentView(R.layout.activity\u main)
在onCreate
中。您需要使用正确的布局来访问所需的id。清理项目并重新启动。
ListAdapter adapter = new SimpleAdapter(
MainActivity.this,
rssFeedList, R.layout.site_list_row,
new String[] { TAG_ID, TAG_TITLE, TAG_LINK },
new int[] { R.id.sqlite_id, R.id.title, R.id.link });
lv.setAdapter(adapter);