Search code examples
androidmultithreadinglistviewandroid-fragmentsandroid-arrayadapter

Why am I getting warning "variable may not be initialized"


I am trying to create a list view using an array adapter, a run method and mutltithreading, but I'm receiving the warning "variable summary may not be initialized" on the following line: SummaryData summary = summary.get(position);. Thanks for any help and please bare in mind I am new to Android development.

My MainActivity lookslike this:

public class MainActivity extends FragmentActivity implements OnClickListener{
...
    public void updateResponse() {
        runOnUiThread(new Runnable() {


            @Override
            public void run() {
                StorylineAdapter adapter = new StorylineAdapter(MainActivity.this, R.layout.item_storyline, summary);
                mEditTextResponse.setAdapter(adapter);
}

My ArrayAdapter looks like this:

public class StorylineAdapter extends ArrayAdapter<SummaryData>{
    private Context context;
    private Runnable runnable;
    private ArrayList<SummaryData> summary;

    public StorylineAdapter(Context context, int resource, ArrayList<SummaryData> objects) {
        super(context, resource, objects);
        this.context = context;
        this.runnable = runnable;
        this.summary = objects;
    }



    @Override
    public View getView(int position, View convertView, ViewGroup parent){

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.item_storyline, parent, false);


        SummaryData summary = summary.get(position);
        TextView tv = (TextView) view.findViewById(R.id.textView1);
        tv.setText(summary.getActivity());

        return view;
    }
}

Solution

  • The problem here is that your local variable SummaryData summary is shadowing the property this.summary. Try renaming one of them to something else and everything will work like a charm :)