如何在我的代码中解决空指针异常?

时间:2014-01-03 12:59:18

标签: android

我是一个新的android程序员如何在getView方法中解决空指针异常。在sqlite值没有进入列表视图对象。

标题## CustomerAdapter

package com.example.extra;

import java.util.List;

import com.example.dto.DriverSelectedRouteArrayList;
import com.example.main.R;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;

public class CustomerAdapter extends ArrayAdapter<DriverSelectedRouteArrayList>
{

    DriverSelectedRouteArrayList driverSelectedRouteArrayList;
    private List<DriverSelectedRouteArrayList> list;
    private LayoutInflater layoutInflater;
    Context context;

    public CustomerAdapter(Context context, int resource,
            List<DriverSelectedRouteArrayList> objects) 
    {
        super(context, resource,objects);
        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        ViewHolder holder = null;
        if(convertView == null)
        {
            convertView = layoutInflater.inflate(R.layout.student_list_view_itom, null);
            holder = new ViewHolder();
            holder.srNumberTextView = (TextView) convertView.findViewById(R.id.srNumberTextView);
            holder.nameTextView = (TextView) convertView.findViewById(R.id.textViewStudentItem);
            holder.phoneNumberTextView = (TextView) convertView.findViewById(R.id.textViewPhoneNumber);
            holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBoxSelectForStudentList);
            holder.checkBox
                            .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                                @Override
                                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
                                {
                                    int getPosition = (Integer) buttonView.getTag();
                                    list.get(getPosition).setSelected(buttonView.isChecked());

                                }
                            });
                            convertView.setTag(holder);
                            convertView.setTag(R.id.srNumberTextView,holder.srNumberTextView);
                            convertView.setTag(R.id.textViewStudentItem, holder.nameTextView);
                            convertView.setTag(R.id.textViewPhoneNumber, holder.phoneNumberTextView);

        }else{
                holder = (ViewHolder) convertView.getTag();
             }
        holder.checkBox.setTag(position);
        Log.e("get position=======>", ""+list.get(position));
        holder.srNumberTextView.setText(list.get(position).get_id());
        holder.nameTextView.setText(list.get(position).getFirst_name());
        holder.phoneNumberTextView.setText(list.get(position).getPhone_number());
        holder.checkBox.setChecked(list.get(position).isSelected());
        return convertView;
    }

    static class ViewHolder
    {
        protected TextView srNumberTextView;
        protected TextView nameTextView;
        protected TextView phoneNumberTextView;
        protected CheckBox checkBox;
    }
}

标题## StudentCheckBoxAndListShow

package com.example.main;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;

import com.example.dao.StudentListDatabaseHelper;
import com.example.dto.DriverSelectedRouteArrayList;
import com.example.extra.CustomerAdapter;
import com.example.input.DriverSelectedRouteinput;
import com.example.url.UrlAccess;
import com.example.webservcie.ParseDriverSelectedRouteId;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.res.Resources;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class StudentCheckBoxAndListShow extends Activity implements OnItemClickListener
{
    int layout = R.layout.student_list_view_itom;
    //private String SERVICE_URL = "http://10.0.2.2:8080/SBTsystem/service/viewAllStudentlist";
    UrlAccess urlAccess = new UrlAccess();
    String urlAccessStringVariable = urlAccess.SERVICE_URL;
    String SERVICE_URL = urlAccessStringVariable+"/viewAllStudentlist";

    ProgressDialog progressDialog;

    HttpPost httpPost;
    HttpResponse httpResponse;
    HttpClient httpclient ;
    StatusLine statusLine;


    TextView srNumberTextView;
    ListView listView;
    CustomerAdapter customerAdapter;

    Resources resources;

    List<DriverSelectedRouteArrayList> items;

    DriverSelectedRouteArrayList driverSelectedRouteArrayList = new DriverSelectedRouteArrayList();
    ParseDriverSelectedRouteId parseDriverSelectedRouteId = new ParseDriverSelectedRouteId();


    public ArrayList<DriverSelectedRouteArrayList> studentsListContact = new ArrayList<DriverSelectedRouteArrayList>();


//  CustomAdapter customAdapter;
    StudentListDatabaseHelper studentListDatabaseHelper;

//  oncreate method override
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.student_list_view_show);
        studentListDatabaseHelper = new StudentListDatabaseHelper(this);

        resources = getResources();
        srNumberTextView = (TextView) findViewById(R.id.srNumberTextView);
        listView = (ListView) findViewById(R.id.studentlistView);



        httpclient = new DefaultHttpClient();
//      call async task class       
        new StudentListShowAsyncTask().execute();


    }



    private void populateListView(Resources resource,ListView listView)
    {

    }

    private class StudentListShowAsyncTask extends AsyncTask<String, String, String> 
    {
        //this.getIntent().getExtras();

        @Override
        protected void onPreExecute() 
        {
            // TODO Auto-generated method stub
            super.onPreExecute();
            progressDialog = ProgressDialog.show(StudentCheckBoxAndListShow.this,""
                                ,"Loading. Please wait...", true);
            progressDialog.show();

            Log.d("on pre execute method=====>", "on preexcute");
        }

        @Override
        protected String doInBackground(String... params)
        {
            Bundle extras = getIntent().getExtras();
            String routeIdFromDriverSelected = extras.getString("routeId");

            try {
                httpPost = new HttpPost(SERVICE_URL);

                DriverSelectedRouteinput driverSelectedRouteinput = new DriverSelectedRouteinput();
                String jsonRequest = driverSelectedRouteinput.createjsonRequestForDriverSelectedRoute(routeIdFromDriverSelected);

                StringEntity stringEntety;
                stringEntety = new StringEntity(jsonRequest);

                stringEntety.setContentEncoding("UTF-8");
                stringEntety.setContentType("application/json");

                httpPost.setEntity(stringEntety);

                httpResponse = httpclient.execute(httpPost);
                statusLine = httpResponse.getStatusLine();

                int statusCode = statusLine.getStatusCode();

                if(statusCode == 200)
                    {
                        Log.d("status code", statusCode+"");
                        driverSelectedRouteArrayList = parseDriverSelectedRouteId.parseResponseForRouteIdResult(httpResponse);

                        /*int arrayListSize = parseDriverSelectedRouteId.studentList.size();
                        for(int i =0; i<arrayListSize; i++)
                        {
                        Log.d("response first name=-=-==-===-=-=-=-=>"+i, driverSelectedRouteArrayList.getFirst_name()+"");
                        }*/
                        //String routeId = driverSelectedRouteArrayList.getRoute_id();
                        //Log.d("route id------>", routeId);

                        StudentListDatabaseHelper studentListDatabaseHelper = new StudentListDatabaseHelper(getBaseContext());
                        //studentListDatabaseHelper.getWritableDatabase();
                        studentListDatabaseHelper.insertRecord( driverSelectedRouteArrayList);

                        //select sqlite database in android
                        items = studentListDatabaseHelper.selectRecord();
                        //int _id = driverSelectedRouteArrayList.get_id();
                        /*String _idString = ""+_id;
                        Log.d("id get from the sqlite database-==-=-=-=>",_idString);*/
                        Log.e("database created=========>>", items+"sqlite database created");
                    }
                //Log.d("status code", statusCode+"");
                } catch (Exception e)
                {
                    e.printStackTrace();

                }
            return null;
        }
        @Override
        protected void onPostExecute(String result)
        {
            progressDialog.dismiss();
            super.onPostExecute(result);

            setAdapterToListview();
        }

    }

//  set setAdapterToListview
    public void setAdapterToListview()
    {
        Log.e("set adpter items value====>", ""+items);
        Collections.sort(items,new Comparator<DriverSelectedRouteArrayList>() {

            @Override
            public int compare(DriverSelectedRouteArrayList lhs,
                    DriverSelectedRouteArrayList rhs) 
            {

                return lhs.getFirst_name().compareTo(rhs.getFirst_name());
            }

        });
        customerAdapter = new CustomerAdapter(StudentCheckBoxAndListShow.this,MODE_MULTI_PROCESS, items);
        Log.e("items==========>>>>>>>>>>>>>>", ""+items);
        listView.setAdapter(customerAdapter);
        listView.setOnItemClickListener(new OnItemClickListener() 
        {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id)
            {
                CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBoxSelectForStudentList);
                DriverSelectedRouteArrayList listViewStudent = items.get(position);
                if(listViewStudent.isSelected())
                {
                    listViewStudent.setSelected(false);
                    checkBox.setChecked(false);
                }else
                    {   
                        listViewStudent.setSelected(true);
                        checkBox.setChecked(true);
                    }
            }

        });
    }
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
    {
        DriverSelectedRouteArrayList tempValues = studentsListContact.get(arg2);
        Toast.makeText(this, ""+tempValues.getFirst_name()+"phone number"+tempValues.getPhone_number(), Toast.LENGTH_LONG).show();
    }
}

标题## DriverSelectedRouteArrayList

package com.example.dto;

import java.util.ArrayList;
import java.util.List;

public class DriverSelectedRouteArrayList 
{
//  ArrayList arrayList = new ArrayList();
    ArrayList<String> studentArrayList = new ArrayList<String>();

//  create list view object 
    public List<DriverSelectedRouteArrayList> driverSelectedRouteArrayList;

    public int _id;
    public String first_name;
    public String middle_name;
    public String last_name;
    public String route_id;
    public String phone_number;
    boolean selected;

    public DriverSelectedRouteArrayList()
    {
        first_name = null;
        middle_name = null;
        last_name = null;
        route_id = null;
        phone_number = null;

    }
    public int get_id() 
    {
        return _id;
    }

    public int set_id(int _id) 
    {
        return this._id = _id;
    }
    public ArrayList<String> getStudentArrayList() 
    {
        return studentArrayList;
    }
    public void setStudentArrayList(ArrayList<String> studentArrayList) 
    {
        this.studentArrayList = studentArrayList;
    }

    public String getFirst_name() {
        return first_name;
    }

    public String setFirst_name(String first_name) {
        return this.first_name = first_name;
    }

    public String getMiddle_name()
    {
        return middle_name;
    }
    public String setMiddle_name(String middle_name) 
    {
        return this.middle_name = middle_name;
    }
    public String getLast_name() 
    {
        return last_name;
    }
    public String setLast_name(String last_name) 
    {
        return this.last_name = last_name;
    }
    public String getRoute_id()
    {
        return route_id;
    }
    public String setRoute_id(String routeId)
    {
        return this.route_id = routeId;
    }
    public String getPhone_number() 
    {
        return phone_number;
    }
    public String setPhone_number(String phone_number) 
    {
        return this.phone_number = phone_number;
    }
    public boolean isSelected() {
        return selected;
    }
    public void setSelected(boolean selected) {
        this.selected = selected;
    }
    public List<DriverSelectedRouteArrayList> getDriverSelectedRouteArrayList() 
    {
        return driverSelectedRouteArrayList;
    }
    public void setDriverSelectedRouteArrayList(
            List<DriverSelectedRouteArrayList> driverSelectedRouteArrayList) 
    {
        this.driverSelectedRouteArrayList = driverSelectedRouteArrayList;
    }

}

标题## logcat

01-03 18:30:07.862: E/AndroidRuntime(3989): FATAL EXCEPTION: main
01-03 18:30:07.862: E/AndroidRuntime(3989): java.lang.NullPointerException
01-03 18:30:07.862: E/AndroidRuntime(3989):     at com.example.extra.CustomerAdapter.getView(CustomerAdapter.java:65)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.widget.AbsListView.obtainView(AbsListView.java:2452)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1250)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.widget.ListView.onMeasure(ListView.java:1161)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.view.View.measure(View.java:12865)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.widget.RelativeLayout.measureChild(RelativeLayout.java:579)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:392)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.view.View.measure(View.java:12865)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.view.View.measure(View.java:12865)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:822)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.view.View.measure(View.java:12865)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2242)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.view.View.measure(View.java:12865)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1240)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2628)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.os.Looper.loop(Looper.java:137)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at android.app.ActivityThread.main(ActivityThread.java:4517)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at java.lang.reflect.Method.invokeNative(Native Method)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at java.lang.reflect.Method.invoke(Method.java:511)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
01-03 18:30:07.862: E/AndroidRuntime(3989):     at dalvik.system.NativeStart.main(Native Method)

标题##第二个logcat来解决不同的问题

01-03 18:51:17.792: E/AndroidRuntime(7628): FATAL EXCEPTION: main
01-03 18:51:17.792: E/AndroidRuntime(7628): java.lang.NullPointerException
01-03 18:51:17.792: E/AndroidRuntime(7628):     at java.util.Collections.sort(Collections.java:1890)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at com.example.main.StudentCheckBoxAndListShow.setAdapterToListview(StudentCheckBoxAndListShow.java:188)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at com.example.main.StudentCheckBoxAndListShow$StudentListShowAsyncTask.onPostExecute(StudentCheckBoxAndListShow.java:179)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at com.example.main.StudentCheckBoxAndListShow$StudentListShowAsyncTask.onPostExecute(StudentCheckBoxAndListShow.java:1)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at android.os.AsyncTask.finish(AsyncTask.java:602)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at android.os.AsyncTask.access$600(AsyncTask.java:156)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at android.os.Looper.loop(Looper.java:137)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at android.app.ActivityThread.main(ActivityThread.java:4517)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at java.lang.reflect.Method.invokeNative(Native Method)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at java.lang.reflect.Method.invoke(Method.java:511)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
01-03 18:51:17.792: E/AndroidRuntime(7628):     at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:3)

您尚未初始化私人“列表”对象。
并试图在第65行使用

Log.e("get position=======>", ""+list.get(position));

解决方案

public CustomerAdapter(Context context, int resource,
            List<DriverSelectedRouteArrayList> objects) 
{
     super(context, resource,objects);
     layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     list = objects;
}