当前位置: 首页 > 知识库问答 >
问题:

Android系统如何删除列表中的项目?[副本]

祁柏
2023-03-14

我刚开始开发移动应用程序,我正试图开发一个应用程序来为礼物交换排序名字。一开始,我让它在Eclipse上工作,所以我的计划是在Android Studio上复制它,唯一的问题是,当我试图从列表中删除一个项目时,我不明白为什么应用程序会崩溃。

public class MainActivity extends AppCompatActivity {
List<String> familyGet = Arrays.asList("Adrian","Alan","Ana","Derek","Diego","Gabriel","Ivan","Maggui","Pamela","Melissa","Mirna","Paty","Herminio");
List<String> familyGive = Arrays.asList("Adrian","Alan","Ana","Derek","Diego","Gabriel","Ivan","Maggui","Pamela","Melissa","Mirna","Paty","Herminio");
int randomn;
boolean sameString = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
public void activated(View view) {
    TextView intercambios = findViewById(R.id.intercambios);
    TextView finalizo = findViewById(R.id.finalizado);


    if(familyGet.size()!=0) {
        Collections.shuffle(familyGive);

        do{
            Random r1 = new Random();
            randomn = r1.nextInt(familyGive.size());
            sameString= familyGet.get(randomn).equals(familyGive.get(randomn));
        }while(sameString);

        familyGive.remove(randomn);
        familyGet.remove(randomn);
    }else{
        finalizo.setText("Both list are empty");
    }
}
}

“激活”是按钮的“onclick”功能。代码在没有“.remove()”的情况下完全可以工作。

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.intercambionavideo, PID: 22427
java.lang.IllegalStateException: Could not execute method for android:onClick
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
    at android.view.View.performClick(View.java:7448)
    at android.view.View.performClickInternal(View.java:7425)
    at android.view.View.access$3600(View.java:810)
    at android.view.View$PerformClick.run(View.java:28305)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7656)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
    at android.view.View.performClick(View.java:7448) 
    at android.view.View.performClickInternal(View.java:7425) 
    at android.view.View.access$3600(View.java:810) 
    at android.view.View$PerformClick.run(View.java:28305) 
    at android.os.Handler.handleCallback(Handler.java:938) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:223) 
    at android.app.ActivityThread.main(ActivityThread.java:7656) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
 Caused by: java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(AbstractList.java:167)
    at com.example.intercambionavideo.MainActivity.actividad(MainActivity.java:77)
    at java.lang.reflect.Method.invoke(Native Method) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
    at android.view.View.performClick(View.java:7448) 
    at android.view.View.performClickInternal(View.java:7425) 
    at android.view.View.access$3600(View.java:810) 
    at android.view.View$PerformClick.run(View.java:28305) 
    at android.os.Handler.handleCallback(Handler.java:938) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:223) 
    at android.app.ActivityThread.main(ActivityThread.java:7656) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

共有1个答案

谭献
2023-03-14

正如注释中提到的,arrays.aslist(...)是问题的原因。请参阅文档。它创建一个由数组支持的不可修改列表,因此当您试图删除一个项时,您会得到一个异常。

在您的示例中,名称是硬编码的。解决这个问题的一个方法是,如果它们总是硬编码的,那么包装不可修改的数组列表,例如:

List<String> familyGive = new ArrayList(
    Arrays.asList( ... )
);

编写一个方法从数据源中获取所需的名称,而不是硬编码名称。名字是否存储在数据库中?它们是否被rest API暴露?无论它是什么,都要创建一个方法来获取它们:

List<String> names = initNames();

相应地定义了方法。

从那里,您可以通过包装从init方法返回的名称来创建两个相同的列表:new ArrayList(names)

另外:若要查看操作中的错误,请在debug中运行代码,并按原样在代码中放置断点。

 类似资料:
  • 我有以下代码: 我试图遍历列表中的每个对象,根据条件删除一个项目,并保持循环,直到所有项目都被删除。 当我在intellij中运行这个时,我得到了以下错误: 我搜索了这个问题,找到了这个解决方案。在此处输入链接描述 当我更改代码时,它变成了: 但是,现在我收到以下错误: 我找到了这个错误的答案,但老实说,它并没有为我澄清任何事情。我如何才能从列表中删除该对象?

  • 问题内容: 我有创建元素的代码。我需要单击一次删除一个元素。对于每个元素,我都有。我了解我需要一些功能来通过删除项目。如何使用此功能删除ReactJS中的元素?我的代码: 问题答案: 您正在父级组件中管理数据并在子级组件中呈现UI,因此要从子级组件中删除项目,您需要将一个函数与数据一起传递,从子级中调用该函数并在父级组件内部传递列表项的任何唯一标识符使用该唯一标识符删除项目。 步骤1: 将父组件的

  • 我使用firebase数据库和recycler视图。我使用push()向firebase添加了一个项目列表;命令使用push()时,firebase为每个添加的项目创建唯一的id。 现在,我想删除项目点击删除按钮,但当我尝试删除价值();函数到我的数据库参考,它删除所有存储库,而不仅仅是项目。 这就是我现在所拥有的: 从Firebase读取数据的片段 我的onClick按钮 适配器包com。享受应

  • 本文向大家介绍sharepoint 删除列表中的项目,包括了sharepoint 删除列表中的项目的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 在遍历列表时,我想根据条件删除列表中的项。请参见下面的代码。 这给了我一个例外。 如何才能做到这一点? 问题答案: 您需要使用和调用上,而不是使用循环。

  • 问题内容: 我正在从表单文本字段,并从复选框中的字段 我将它们像这样组合: (此函数在列表中的字符串内去除空格。) 但在这种情况下是空的(没有新的标签进入),但也有一些,包含一个空字符串。 例如,来自: 我如何摆脱空字符串? 如果列表中有一个空字符串: 但是,如果没有空字符串: 但这给出了: 为什么会发生这种情况,我该如何解决? 问题答案: 1)几乎是英式风格: 使用操作员测试是否存在,然后应用该