Android 为什么在下面的代码中会出现堆栈溢出?

Android 为什么在下面的代码中会出现堆栈溢出?,android,listview,android-listview,Android,Listview,Android Listview,我下面有一节课 package com.example.metermanager; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import java.util.Locale; import meter.manager.helper.DatabaseHelperClass; import meters.

我下面有一节课

package com.example.metermanager;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import meter.manager.helper.DatabaseHelperClass;
import meters.model.MeterReading;
import meters.model.VMeterReadings;
import meters.model.VReadings;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class EditReadingsAdapter extends BaseAdapter {
    @SuppressWarnings("unused")
    private Context context;
    DatabaseHelperClass db;
    private static String DB_NAME="meterapp.sqlite";    
    private List<VReadings> readings =new ArrayList<VReadings>();
    DecimalFormat df = new DecimalFormat("#,###,###,###");
    SimpleDateFormat fm =new SimpleDateFormat("dd-MM-yyyy",Locale.UK);

    public EditReadingsAdapter( Context context1, String myDate) {
        this.context=context1;
        DatabaseHelperClass db= new  DatabaseHelperClass( context1,DB_NAME);
        readings=db.GetMeterReadings(myDate);
        db.close();

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return readings.size();
    }

    @Override
    public Object getItem(int index) {
        // TODO Auto-generated method stub
        return getItem(index);
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }

    @Override
    public View getView(int arg0, View view, ViewGroup parent) {
        try{        
            if (view ==null){
                LayoutInflater inflater=
                        LayoutInflater.from(parent.getContext());
                      view =inflater.inflate(R.layout.edit_reading_details,parent,false);

            }
            VReadings reading =readings.get(arg0);              

            TextView idTextView =(TextView)
                    view.findViewById(R.id.textView6);

            idTextView.setText( Integer.toString(reading.get_id()));

            TextView readingdateTextView =(TextView)
                    view.findViewById(R.id.textView7);      
            readingdateTextView.setText(fm.format(((reading.getReadingDate()))));

            TextView readingTextView =(TextView)
                    view.findViewById(R.id.textView8);      
             readingTextView.setText(df.format((reading.getReading())));

             TextView Rate =(TextView)
                        view.findViewById(R.id.textView9);      
            Rate.setText(df.format(reading.getRate()));

             TextView meterTextView =(TextView)
                        view.findViewById(R.id.textView10);     
                 meterTextView.setText(reading.getMeter_number().toString());



            }catch(Exception e)
            {
                Log.e("Error loading data in listbox",e.toString());
            }
            return view;
        }



}
在上,我在listview上设置了onclickListener事件

我希望能够在listview中获取当前选定的对象,并在自定义对话框中使用它

public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
    Context context = this.getApplicationContext();         
    // custom dialog
    try{
                final Dialog dialog = new Dialog(context);
                dialog.setContentView(R.layout.edit_reading_dialog);
                dialog.setTitle("Edit Meter Readings"); 

                VReadings r= (VReadings)adapter.getItem(position);
下面这条线似乎就是问题的根源

VReadings r= (VReadings)adapter.getItem(position);
为什么?


Ronald

因为函数
getItem
调用自身。你最终得到了无限的调用循环

public Object getItem(int index) {
       // TODO Auto-generated method stub
       return getItem(index);
}

由于引擎盖下函数的参数通过堆栈传递,最终导致堆栈溢出。

因为
@覆盖公共对象getItem(int-index){//TODO自动生成的方法存根返回getItem(index);}
也许您需要调用超级方法或从某个数组中获取它。我可以通过添加超级来修改吗?
  @Override
  public Object getItem(int index) {
    // TODO Auto-generated method stub
    return readings.get(index);
  }
public Object getItem(int index) {
       // TODO Auto-generated method stub
       return getItem(index);
}
  @Override
  public Object getItem(int index) {
    // TODO Auto-generated method stub
    return readings.get(index);
  }