Reputation: 417
I have this class below.
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;
}
}
I use the class to load data into a listview widget.
public void Search(View v)
{
try{
Date search=fm.parse(txtviewreadingDate.getText().toString());
String searchDate=fm.format(search);
adapter = new EditReadingsAdapter(this ,searchDate);
ListView listview =(ListView)findViewById(R.id.lstSearchReadings);
listview.setAdapter(adapter);
listview.setOnItemClickListener(this);
} catch(Exception e)
{
Log.e("Search Error", e.toString());
}
}
On i have set an onclickListener event on the listview.
I want to be able to get the currently selected object in the listview and use it on a custom dialog box.
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);
When i click on the listview , i get a force close error.
Here is the Logcat for the error.
02-10 19:15:28.906: I/dalvikvm(5060): threadid=1: stack overflow on call to Lcom/example/metermanager/EditReadingsAdapter;.getItem:LI
02-10 19:15:28.906: I/dalvikvm(5060): method requires 12+20+8=40 bytes, fp is 0x4428a320 (32 left)
02-10 19:15:28.916: I/dalvikvm(5060): expanding stack end (0x4428a300 to 0x4428a000)
02-10 19:15:28.916: I/dalvikvm(5060): Shrank stack (to 0x4428a300, curFrame is 0x4428cebc)
02-10 19:15:28.916: D/AndroidRuntime(5060): Shutting down VM
02-10 19:15:28.916: W/dalvikvm(5060): threadid=1: thread exiting with uncaught exception (group=0x40015560)
02-10 19:15:29.227: E/AndroidRuntime(5060): FATAL EXCEPTION: main
02-10 19:15:29.227: E/AndroidRuntime(5060): java.lang.StackOverflowError
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.get
02-10 19:15:29.657: D/dalvikvm(5060): GC_CONCURRENT freed 1491K, 58% free 3062K/7175K, external 4957K/5214K, paused 8ms+8ms
02-10 19:15:35.306: I/Process(5060): Sending signal. PID: 5060 SIG: 9
And it looks like the line below is the trouble causer.
VReadings r= (VReadings)adapter.getItem(position);
Why?
Ronald
Upvotes: 0
Views: 59
Reputation: 21753
@Override
public Object getItem(int index) {
// TODO Auto-generated method stub
return readings.get(index);
}
Upvotes: 0
Reputation: 7017
Because function getItem
calls itself. You end up with infinite call loop.
public Object getItem(int index) {
// TODO Auto-generated method stub
return getItem(index);
}
As parameters to functions under the hood are passed through the stack, you end up with stack overflow.
Upvotes: 2