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