【问题标题】:Displaying all values of arraylist to a textview将arraylist的所有值显示到文本视图
【发布时间】:2015-10-24 18:26:46
【问题描述】:

我正在开发一个应用程序,我必须从数组列表obj 生成随机值并将生成的值保存到rndmObj 数组列表。然后我需要将rndmObj 的所有值显示到屏幕上的多行文本视图tvObjectList1。但是在打开应用程序时,它会崩溃并显示“不幸的是应用程序已关闭”的常见消息。

我知道代码存在一定的问题。所以 logcat 不会有帮助。

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.level);


    prepareObjList();
    randObjFunc();
   }}

    private void prepareObjList() {
    // TODO Auto-generated method stub
    //adding string values to arrayList for tvObjectList1
    obj = new ArrayList<String>();
    obj.add("bowTie");
    obj.add("key");
    obj.add("grosshoper");


    //adding imageViews to objImg arrayList
    objImg = new ArrayList<Integer>();
    objImg.add(R.drawable.level1_bowtie);
    objImg.add(R.drawable.level1_key);
    objImg.add(R.drawable.level1_grasshopper);
}


final Random randomGenerator = new Random();
ArrayList<String>obj;
ArrayList<String>rndmObj;
public String item=null;
private void randObjFunc(){
    int index=0;
    while(index <10){
        item = obj.get(randomGenerator.nextInt(obj.size()));
        rndmObj.add(index, item);
        obj.remove(obj.indexOf(item));
        index++;
    }
    dispRndmObj();
}


private void dispRndmObj(){
    for (int i=0; i<rndmObj.size();i++){
        ((TextView) findViewById(R.id.tvObjectList1))
        .setText(rndmObj.get(i).toString());
    }        

}

没有语法错误,应用安装完美。所有的初始化都是对所有变量、数组列表等进行的 我希望能快速获得一些有用的建议、指导和代码 sn-p。

【问题讨论】:

  • obj 永远不会被初始化。您正在null 上操作。
  • 另外,标签也很模糊。您应该添加语言和平台 - java 和 android?
  • obj 在 onCreate 方法中被初始化。是的,我正在通过 Eclipse 上的 java 为 Android 开发。
  • 用需要的代码更新问题。几秒钟后重新访问它。

标签: java android arraylist random textview


【解决方案1】:

你曾经初始化过 obj 和 rndmObj 吗?

试试

ArrayList<String> obj = new ArrayList<>();
ArrayList<String> rndmObj = new ArrayList<>();

还有

randomGenerator.nextInt(obj.size())

如果 obj 为空,将抛出 IllegalArgumentException(例如,因为您从未填充它,而您似乎没有填充它。)

【讨论】:

    【解决方案2】:

    好吧,您的代码中有几处有问题,首先将 objrndmObj 初始化为

    ArrayList<String> obj = new ArrayList<String>(); ArrayList<String> rndmObj = new ArrayList<String>();

    之后,您很可能会在obj.size() 上获得IllegalStateException,因为它会返回零,这是nextInt(n); 方法所不期望的。因此,您可能必须在obj 中插入一些值,或者取决于您想进一步做什么。完成此操作后,您将弄清楚下一步该做什么。希望这会有所帮助,如果卡在任何地方,您可以发表评论。 :)

    【讨论】:

    • @SaadAhmedKhan 你还没有在你更新的代码中初始化rndmObj
    • 同样在您的问题中,您将变量声明为arraylist1arraylist2,但在代码中您实际上使用的是objrndmObj。请尝试在您的问题中维护代码结构。只是一个额外的建议:)
    • 好的,我已经更新了问题。我已经尝试了使用变量而不是“rndmObj”数组列表的相同架构。并在文本视图上显示该变量的值。它完美地工作。现在我想知道的是查看或显示数组列表中的所有值到多行文本视图的过程是什么,如我的情况“tvObjectList1”。
    • 我正面临 dispRndmObj() 方法的问题。是否足以完成逻辑。
    • 你还没有在你的代码中初始化rndmObj。好吧,正如您所说,我假设在dispRndmObj() 方法之前,一切正常,并且您在rndmObj 中获得所有值。要在 textView 中打印所有值,只需用此方法替换您的方法并尝试:private void dispRndmObj(){ TextView textView = ((TextView) findViewById(R.id.tvObjectList1)); for (int i=0; i&lt;rndmObj.size();i++){ textView.setText(textView.getText() + rndmObj.get(i).toString()); } } 希望它有所帮助,如果是,请接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多