user4488923
user4488923

Reputation:

Null pointer at setting setAdapter() in customadapter

I have two layouts for a single activity that I will dynamically change the layout. Here the null pointer occurs at the line.

  1. I tried to change the view from layout 1 to layout 2
  2. listview.setadapter(listviewAdapter)

    lv2.setAdapter(lva);

The error I am getting is

java.lang.NullPointerException at in.prasilabs.eagleeye.Log$DBSync.onPostExecute(Log.java:170)

public class Log extends Activity {

    ListView lv1;
    ListView lv2;

    @Override
    protected void onCreate(Bundle savedInstanceState)  {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.logmenu);

        lv1 = (ListView) findViewById(R.id.listView1);

        final Activity act = getParent();

        String[] menu = new String[] 
        {
            "Last 10 log",
            "All logs (100)",

        };

        ArrayAdapter<String> menuadapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,android.R.id.text1, menu);

        lv1.setAdapter(menuadapter);

        lv1.setOnItemClickListener(new OnItemClickListener() {
            DBSync dbs;
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                switch (position) {
                case 0:
                    dbs = new DBSync(position, Log.this, act);
                    dbs.execute();
                    break;

                default:    
                    break;
                }
            }
        });
    }

    class DBSync extends AsyncTask<String, Void, Void> {
        int q;
        String[] time = new String[]{"No logs"};
        String[] status = new String[]{"closed"};
        Context cnt;
        Activity act;
        public DBSync(int qu, Log lg, Activity ac) {
            q = qu;
            cnt = lg;
            act = ac;
        }

        @Override
        protected Void doInBackground(String... params) {   
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            //setContentView(R.layout.log);

        time = new String[]{"hii","yes"};
        status = new String[]{"no", "yes"};
        boolean isFirstXml=true;//evaluatingConditionFunction();
        LayoutInflater inflator=getLayoutInflater();
        View view=inflator.inflate(isFirstXml?R.layout.logmenu:R.layout.log, null, false);
        view.startAnimation(AnimationUtils.loadAnimation(cnt, android.R.anim.slide_out_right));
        **setContentView(view);**
        lv2 = (ListView) findViewById(R.id.listView2);

        ListViewAdapter lva = new ListViewAdapter(act, time, status);
        **lv2.setAdapter(lva);**
        lv2.refreshDrawableState();


        }           
    }
}

Upvotes: 0

Views: 185

Answers (1)

ByteHamster
ByteHamster

Reputation: 4951

You are calling setContentView twice.

setContentView(R.layout.log);
setContentView(R.layout.logmenu);

By calling it twice, only the second one (R.layout.logmenu) will be set. I guess R.id.listView2 is in R.layout.log. Because of this, (ListView) findViewById(R.id.listView2) returns null and lv2 gets null. When you try to call lv2.setAdapter, you try to set an adapter on an object that is null - Your app crashes.

Upvotes: 1

Related Questions