【问题标题】:Why am I getting warning "variable may not be initialized"为什么我收到警告“变量可能未初始化”
【发布时间】:2015-07-14 12:54:02
【问题描述】:

我正在尝试使用数组适配器、运行方法和多线程创建列表视图,但我在以下行收到警告“变量摘要可能未初始化”:SummaryData summary = summary.get(position);。感谢您的帮助,请记住我是 Android 开发新手。

我的 MainActivity 如下所示:

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

我的 ArrayAdapter 如下所示:

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

【问题讨论】:

  • becoz summary=empty StorylineAdapter adapter = new StorylineAdapter(MainActivity.this, R.layout.item_storyline, summary);
  • 您在哪里收到警告?您确定这是警告而不是错误吗? summary 在MainActivity 中来自哪里?
  • 除了扩展ArrayAdapter 和使用summary.get(position) 之类的数据...当然,只有当您使用过滤时,它才会将您踢进a**...但如果您不这样做需要它为什么不直接扩展BaseAdapter

标签: android multithreading listview android-fragments android-arrayadapter


【解决方案1】:

这里的问题是您的局部变量SummaryData summary 正在遮蔽属性this.summary。尝试将其中一个重命名为其他名称,一切都会像魅力一样发挥作用:)

【讨论】:

  • 不知道为什么有人对你投了反对票,这显然是正确的答案:p
  • 谢谢,这似乎有效,但现在当应用程序崩溃时,我在堆栈跟踪中得到了这个:07-14 19:00:15.605 29316-29316/com.protogeo.moves.demos.apps W/dalvikvm : threadid=1: 线程退出未捕获异常 (group=0xa4b8f648) 07-14 19:00:15.633 29316-29316/com.protogeo.moves.demos.apps E/AndroidRuntime: 致命异常: main java.lang.NullPointerException at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330) 在 android.widget.ListView.onMeasure(ListView.java:1128) 在 android.view.View.measure(View.java:15848) ...
  • 您的getCount() 实现有问题。您正在尝试访问 null 对象的属性...可能是 summary 字段(我猜)
  • @dbo,如果您认为我的回答对您解决问题有帮助,请您将我的回答标记为正确:)
  • 感谢 Kirkil,答案确实有所帮助,但我仍然陷入困境并遇到致命异常。我希望进一步解释如何防止致命异常,如果您能提供帮助,请告诉我?
猜你喜欢
  • 2012-07-18
  • 1970-01-01
  • 2016-07-07
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
相关资源
最近更新 更多