Android 如何处理此空指针异常? 公共类显示扩展了ListActivity { 法赫勒佩尔私人住宅; 私人对话; 私有字符串Url; 私有int成功=0; 专用分离列表适配器; 私有列表视图列表; 私人名单cat_名单; @凌驾 创建时的公共void(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle(“董事会指数”); list=(ListView)findViewById(R.id.dlist); setOnItemClickListener(itemclicklistener()); setContentView(R.layout.displaylist); faHelper=新的ForumAdapter(本); Url=geturl(savedInstanceState); 如果(faHelper.isGood(Url)) { 加载(); } 其他的 { 警报对话框(0); } } 私有类pbar扩展异步任务 { 私有最终字符串消息=“正在加载。请稍候…”; @凌驾 受保护的void onPreExecute() { dialog=ProgressDialog.show(Display.this,“,消息,true); } @凌驾 受保护的void onPostExecute(整数结果) { 成功=结果; dialog.dismise(); displaystuff(); } 受保护的整数doInBackground(字符串…url) { 返回faHelper.SourceDownload(url[0]); } } 私有void displaystuff() { 如果(成功==1) { sAdapter=新的分离列表适配器(this,R.layout.demoheader); 用于(对象行:faHelper.BoardIndex) { 字符串[][]row=(字符串[][])行; 字符串ctitle=“”; cat_list=新链接列表(); for(int i=0;i
这行代码出于某种原因创建了一个空指针异常,我不知道为什么 setOnItemClickListener(itemclicklistener()) 当我只是简单地用代码创建一个listview时,它似乎工作得很好。但是,当我实际将它设置为linearlayout中的listview时,除了单击侦听器之外,一切都很好。任何建议都会有帮助 xml的内容如下: displaylist.xmlAndroid 如何处理此空指针异常? 公共类显示扩展了ListActivity { 法赫勒佩尔私人住宅; 私人对话; 私有字符串Url; 私有int成功=0; 专用分离列表适配器; 私有列表视图列表; 私人名单cat_名单; @凌驾 创建时的公共void(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle(“董事会指数”); list=(ListView)findViewById(R.id.dlist); setOnItemClickListener(itemclicklistener()); setContentView(R.layout.displaylist); faHelper=新的ForumAdapter(本); Url=geturl(savedInstanceState); 如果(faHelper.isGood(Url)) { 加载(); } 其他的 { 警报对话框(0); } } 私有类pbar扩展异步任务 { 私有最终字符串消息=“正在加载。请稍候…”; @凌驾 受保护的void onPreExecute() { dialog=ProgressDialog.show(Display.this,“,消息,true); } @凌驾 受保护的void onPostExecute(整数结果) { 成功=结果; dialog.dismise(); displaystuff(); } 受保护的整数doInBackground(字符串…url) { 返回faHelper.SourceDownload(url[0]); } } 私有void displaystuff() { 如果(成功==1) { sAdapter=新的分离列表适配器(this,R.layout.demoheader); 用于(对象行:faHelper.BoardIndex) { 字符串[][]row=(字符串[][])行; 字符串ctitle=“”; cat_list=新链接列表(); for(int i=0;i,android,listview,android-linearlayout,Android,Listview,Android Linearlayout,这行代码出于某种原因创建了一个空指针异常,我不知道为什么 setOnItemClickListener(itemclicklistener()) 当我只是简单地用代码创建一个listview时,它似乎工作得很好。但是,当我实际将它设置为linearlayout中的listview时,除了单击侦听器之外,一切都很好。任何建议都会有帮助 xml的内容如下: displaylist.xml public class Display extends ListActivity { private
public class Display extends ListActivity
{
private ForumAdapter faHelper;
private ProgressDialog dialog;
private String Url;
private int success = 0;
private SeparatedListAdapter sAdapter;
private ListView list;
private List<Map<String,?>> cat_list;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setTitle("Board Index");
list = (ListView) findViewById(R.id.dlist);
list.setOnItemClickListener(itemclicklistener());
setContentView(R.layout.displaylist);
faHelper = new ForumAdapter(this);
Url = geturl(savedInstanceState);
if (faHelper.isGood(Url))
{
Load();
}
else
{
alertdialog(0);
}
}
private class pbar extends AsyncTask<String, Void, Integer>
{
private final String message = "Loading. Please wait...";
@Override
protected void onPreExecute()
{
dialog = ProgressDialog.show(Display.this, "", message, true);
}
@Override
protected void onPostExecute(Integer result)
{
success = result;
dialog.dismiss();
displaystuff();
}
protected Integer doInBackground(String... url)
{
return faHelper.SourceDownload(url[0]);
}
}
private void displaystuff()
{
if (success == 1)
{
sAdapter = new SeparatedListAdapter(this, R.layout.demoheader);
for (Object row : faHelper.BoardIndex)
{
String[][] theRow = (String[][])row;
String ctitle = "";
cat_list = new LinkedList<Map<String,?>>();
for (int i = 0; i < theRow.length; i++)
{
if (i == 0) ctitle = theRow[i][0];
/* + "\n" + theRow[i][2]*/
cat_list.add(createObject(theRow[i][1], theRow[i][3]));
}
ExAdapter exone = new ExAdapter(this, R.layout.demorow, cat_list);
sAdapter.addSection(ctitle, exone);
}
list.setAdapter(sAdapter);
}
else
{
alertdialog(1);
}
}
private OnItemClickListener itemclicklistener()
{
return new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
@SuppressWarnings("unchecked") // Object to Map.
Map<String,?> one = (Map<String,?>) parent.getAdapter().getItem(position);
Toast.makeText(getApplicationContext(), one.get("title").toString(), Toast.LENGTH_SHORT).show();
}
};
}
private void alertdialog(int which)
{
switch (which)
{
case 0:
new AlertDialog.Builder(this)
.setTitle("Alert")
.setMessage("Connection Error!!!" + "\n\n" + faHelper.rstring)
.setPositiveButton("OK", new OnClickListener()
{
public void onClick(DialogInterface arg0, int arg1)
{
Display.this.finish();
}
})
.show();
break;
case 1:
new AlertDialog.Builder(this)
.setTitle("Alert")
.setMessage("Error!!" + "\n\n" + "Press OK to try again!")
.setPositiveButton("OK", new OnClickListener()
{
public void onClick(DialogInterface arg0, int arg1)
{
Load();
}
})
.setPositiveButton("Cancel", new OnClickListener()
{
public void onClick(DialogInterface arg0, int arg1)
{
success = 1;
Display.this.finish();
}
})
.show();
break;
}
}
public Map<String,?> createObject(String title, String image)
{
Map<String,String> item = new HashMap<String,String>();
item.put("title", title);
item.put("image", image);
return item;
}
public void refresh(View view)
{
Load();
}
private void Load()
{
new pbar().execute(Url);
}
private String geturl(Bundle savedInstanceState)
{
String url = (savedInstanceState == null) ? null : (String) savedInstanceState.getSerializable("URL");
if (url == null)
{
Bundle extras = getIntent().getExtras();
url = extras != null ? extras.getString("URL") : null;
}
return url;
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putSerializable("URL", Url);
}
@Override
protected void onPause()
{
super.onPause();
}
@Override
protected void onResume()
{
super.onResume();
}
}
header.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:onClick="refresh"
android:text="Refresh"
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="32dp">
</Button>
</LinearLayout>
<ListView
android:id="@+id/dlist"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
row.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/demoheader_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="2dip"
android:paddingBottom="2dip"
android:paddingLeft="5dip"
android:background="#FFFFFF"
style="?android:attr/listSeparatorTextViewStyle"
/>
setContentView(R.layout.something)在写入findviewbyid函数后首先将其放在前面,然后您将不会找到此空指针异常您需要在
findviewbyid()之前调用setContentView()
,否则它将返回空值。修改代码,使其看起来像这样:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<ImageView
android:id="@+id/icon"
android:layout_width="45dp"
android:layout_height="45dp"
android:width="50dp"
android:height="50dp"
android:scaleType="fitStart"
android:paddingRight="5dp"
/>
<TextView
android:id="@+id/text2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="false"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
</LinearLayout>
如果你是
setContentView(R.layout.displaylist);
list = (ListView) findViewById(R.id.dlist);
list.setOnItemClickListener(itemclicklistener());
android:id="@android:id/list
list = (ListView) findViewById(R.id.dlist);
list.setOnItemClickListener(itemclicklistener());