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

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,android,listview,android-linearlayout,Android,Listview,Android Linearlayout,这行代码出于某种原因创建了一个空指针异常,我不知道为什么 setOnItemClickListener(itemclicklistener()) 当我只是简单地用代码创建一个listview时,它似乎工作得很好。但是,当我实际将它设置为linearlayout中的listview时,除了单击侦听器之外,一切都很好。任何建议都会有帮助 xml的内容如下: displaylist.xml public class Display extends ListActivity { private

这行代码出于某种原因创建了一个空指针异常,我不知道为什么

setOnItemClickListener(itemclicklistener())

当我只是简单地用代码创建一个listview时,它似乎工作得很好。但是,当我实际将它设置为linearlayout中的listview时,除了单击侦听器之外,一切都很好。任何建议都会有帮助

xml的内容如下:

displaylist.xml

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