Search code examples
androidandroid-listviewbaseadapter

Base Adapter throws null point warning


i am trying to create list view using base adapter but it shows me blank screen but with warnings, here is my adapter class

public class SuggestionListAdapter extends BaseAdapter implements View.OnClickListener {
    private Activity activity;
    private List suggestion;
    private Post post = null;
    private LayoutInflater inflater;

    /*Constructor*/
    public SuggestionListAdapter(Activity activity, List<Post> suggestion) {
        this.activity = activity;
        this.suggestion = suggestion;
        inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//        LayoutInflater inflater = LayoutInflater.from(activity);
    }

    /*Ends Here*/

    @Override
    public int getCount() {
        return 0;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.row_of_list_suggestions, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.txtvNameSuggestion = (TextView) convertView.findViewById(R.id.txtvNameSuggestion);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.txtvNameSuggestion.setText("hello");
        return convertView;
    }

    @Override
    public void onClick(View v) {

    }


    /**
     * ****** Create a holder Class to contain inflated xml file elements ********
     */
    public static class ViewHolder {

        public TextView txtvNameSuggestion;
        public TextView txtvUsernameSuggestion;

        public ImageView frmUserImgRound;
        public ImageView imgvUserPic;
        public Button btnFollowUnFollow;
    }
}

And this is how i am calling it in my search activity

public class SearchActivity extends ListActivity {
    private TextView txtvName, txtvUsername;
    private ImageView imgvUserPic;
    private Button btnFollowUnFollow;
    private ListView list;
    private List<Post> userslist = new ArrayList<Post>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_search);
        doMySearch("hello");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_search, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        // Get the intent, verify the action and get the query
        Intent intent = getIntent();
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
            String query = intent.getStringExtra(SearchManager.QUERY);
            doMySearch(query);
        }


        return super.onOptionsItemSelected(item);
    }

    public void doMySearch(String Query) {
        class SendPostReqAsyncTask extends AsyncTask<Void, Void, String> {

            ProgressDialog dialog;

            // Show Progress bar before downloading Music
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                // Shows Progress Bar Dialog and then call doInBackground method
                dialog = ProgressDialog.show(SearchActivity.this, "", "Loading. Please wait...", true);
            }

            @Override
            protected String doInBackground(Void... params) {
                HttpClient httpClient = new DefaultHttpClient();
                StringBuilder url = new StringBuilder(MyAppUtil.API_URL); // Build URL as a String
                String stUrlParams = "post/getUserHomeList/1/" + AppGlobal.currentUserId + "/25/0";
                url.append(stUrlParams);
                HttpGet httpGet = new HttpGet(url.toString());
                try {
                    HttpResponse httpResponse = httpClient.execute(httpGet);
                    InputStream inputStream = httpResponse.getEntity().getContent();
                    InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                    StringBuilder stringBuilder = new StringBuilder();
                    String bufferedStrChunk = null;
                    while ((bufferedStrChunk = bufferedReader.readLine()) != null) {
                        stringBuilder.append(bufferedStrChunk);
                    }
                    return stringBuilder.toString();
                } catch (ClientProtocolException cpe) {
                    System.out.println("First Exception caz of HttpResponese :" + cpe);
                    cpe.printStackTrace();
                } catch (IOException ioe) {
                    System.out.println("Second Exception caz of HttpResponse :" + ioe);
                    ioe.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(String result) {
//                super.onPostExecute(result);
                //close process dialog
                if (this.dialog != null) {
                    this.dialog.dismiss();
                }
                //parse json
                System.out.println(result);
                JsonParser jsonParser = new JsonParser(result);
                String message = jsonParser.getResponseMessage();
                if (jsonParser.isSuccess()) {
                    System.out.println(message);
                    JSONArray postDataArr = jsonParser.getResponseDataRow(JsonParser.API_KEY_POST_DATASET);
                    System.out.println(postDataArr.length());
                    Post post = new Post();
                    // Parsing json
                    for (int i = 0; i < postDataArr.length(); i++) {

                        try {
                            userslist.add(post);
                            list = (ListView) findViewById(R.id.list1);

                            ListAdapter adapter = new SuggestionListAdapter(SearchActivity.this, userslist);
                            list.setAdapter(adapter);// line #153  here
                            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                                @Override
                                public void onItemClick(AdapterView<?> parent, View view,
                                                        int position, long id) {
//                                    Toast.makeText(SearchActivity.this, "You Clicked at " + userslist.get(+position).get("name"), Toast.LENGTH_SHORT).show();
                                }
                            });
//                            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//                                @Override
//                                public void onItemClick(AdapterView<?> parent, final View view,
//                                                        int position, long id) {
//                                    final String item = (String) parent.getItemAtPosition(position);
//                                    Log.v("SDSD", "DDFFFFFFF");
//                                }
//                            });

                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                } else {
                    MyAppUtil.getToast(getApplicationContext(), message);
                }
            }
        }
        SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
        sendPostReqAsyncTask.execute();
    }


}

My XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.almaarijsoft.kanvas.Activities.SearchActivity">

    <ListView
        android:id="@+id/list1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>

AND

<?xml version="1.0" encoding="utf-8"?><!--android:background="@drawable/selector_list_row"-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@color/gray_dark">

    <LinearLayout
        android:id="@+id/llUserInfo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/black_gray"
        android:orientation="vertical"
        android:paddingBottom="5dp"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:paddingTop="5dp"
        android:weightSum="1"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="0dp"
        android:layout_marginRight="0dp"
        android:layout_marginBottom="1dp">

        <!-- ========== START ROW1  ========== -->

        <RelativeLayout
            android:id="@+id/rltRow1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <!-- User Picture Frame -->
            <FrameLayout
                android:id="@+id/frmUserImgRound"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_alignParentLeft="true"
                android:layout_marginRight="8dp">

                <ImageView
                    android:id="@+id/imgvUserPic"
                    android:layout_width="32dp"
                    android:layout_height="32dp"
                    android:layout_alignParentLeft="true"
                    android:layout_marginRight="8dp" />

                <ImageView
                    android:layout_width="32dp"
                    android:layout_height="32dp"
                    android:src="@drawable/shap_round_frame_small_selector" />

            </FrameLayout>

            <!-- Username -->
            <TextView
                android:id="@+id/txtvUsernameSuggestion"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="8dp"
                android:layout_toRightOf="@+id/frmUserImgRound"
                android:text="m.rashid.se"
                android:textColor="@color/orange"
                android:textSize="@dimen/post_description"
                android:textStyle="bold" />

            <Button
                android:id="@+id/btnFollowUnFollow"
                android:layout_width="100dp"
                android:layout_height="25dp"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:background="@color/gray"
                android:text="@string/btn_follow"
                style="@style/AppTheme2"
                />
        </RelativeLayout>
        <!-- ========== END ROW1  ========== -->

        <!-- ========== START ROW2  ========== -->

        <RelativeLayout
            android:id="@+id/rltRow2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <!-- Username -->
            <TextView
                android:id="@+id/txtvNameSuggestion"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="40dp"
                android:text="M. Rashid Hussain"
                android:textColor="@color/gray"
                android:textSize="@dimen/post_created_at"
                android:textStyle="bold" />
        </RelativeLayout>
    </LinearLayout>

</RelativeLayout>

These are the warnings that i am getting.

12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ java.lang.NullPointerException
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at com.almaarijsoft.kanvas.Activities.SearchActivity$1SendPostReqAsyncTask.onPostExecute(SearchActivity.java:153)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at com.almaarijsoft.kanvas.Activities.SearchActivity$1SendPostReqAsyncTask.onPostExecute(SearchActivity.java:89)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at android.os.AsyncTask.finish(AsyncTask.java:632)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at android.os.AsyncTask.access$600(AsyncTask.java:177)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at android.os.Looper.loop(Looper.java:136)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5579)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ java.lang.NullPointerException
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at com.almaarijsoft.kanvas.Activities.SearchActivity$1SendPostReqAsyncTask.onPostExecute(SearchActivity.java:153)
12-06 18:56:42.074  24567-24567/com.almaarijsoft.kanvas W/System.err﹕ at com.almaarijsoft.kanvas.Activities.SearchActivity$1SendPostReqAsyncTask.onPostExecute(SearchActivity.java:89)

Solution

  • setContentView in your SearchActivity is commented out, therefore there are no widgets that can be found via findViewById. That's the reason of the NPE. The second mistake is the implementation of getCount in your Adapter. It should not return 0 but the size of the dataset. E.g.

    @Override
    public int getCount() {
        return suggestion == null ? 0 : suggestion.size();      
    }