2014-02-11 3 views
0

У меня этот класс ниже.Почему я получаю переполнение стека в коде ниже?

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



} 

Я использую класс для загрузки данных в виджет списка.

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

} 

0 У меня установлено событие onclickListener в списке.

Я хочу, чтобы получить выбранный объект в списке и использовать его в пользовательском диалоговом окне.

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

Когда я нажимаю на список, я получаю силовую ошибку закрытия.

Адрес этой страницы: Logcat.

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 

И похоже, что нижеследующая строка является причиной возникновения проблем.

VReadings r= (VReadings)adapter.getItem(position); 

Почему?

Ronald

+0

из '@Override общественного объекта GetItem (INT индекс) {// TODO автоматическая генерация метод заглушки возврата GetItem (индекс); } 'может быть, вы wana вызов супер метод или получить его из какого-то массива – Selvin

+0

Привет. Могу ли я изменить, добавив супер? – user3079559

ответ

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

Спасибо. Это решило проблему стека. Я ученик! – user3079559

2

Поскольку сама функция getItem вызовов. В конечном итоге вы получаете бесконечный цикл вызовов.

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

Поскольку параметры функций под капотом проходят через стек, вы получаете переполнение стека.

Смежные вопросы