尝试将字符串插入CharSequence AlertDialog时出错

时间:2017-02-17 18:16:41

标签: android arraylist alertdialog

我从声明为ArrayList<UserData> spart = MainActivity.userDataList;的JSON对象中获取了一个ArrayList基本上我尝试做的是在选择特定身体部位时在警告对话框中显示症状。如果我删除if语句,代码正在运行,但它将显示所有可用的症状。
这是我在charsequence

中插入的代码
final CharSequence[] symptom = new CharSequence[spart.size()];
int x = 0;
for(int i = 0 ; i < spart.size(); i++)
{
    if(spart.get(i).getSymp_part() == partsSelect) //this part is not working
    {
        symptom[x] = spart.get(i).getSymp_name();
        x++;
    }
}

AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
 builder.setTitle("What do you feel?")
        .setMultiChoiceItems(symptom, null, new DialogInterface.OnMultiChoiceClickListener() {
            public void onClick(DialogInterface dialogInterface, int item, boolean b) {

            }
        })
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {
            }
        });

            builder.create().show();
        }

    });

这是我存储所有JSON对象的UserData类。

public class UserData {

private String sid;
private String symp_name;
private String symp_part;
private String symp_desc;

public UserData(String sid, String symp_name, String symp_part, String symp_desc){
    this.sid = sid;
    this.symp_name = symp_name;
    this.symp_part = symp_part;
    this.symp_desc = symp_desc;
}

public String getSid() {
    return sid;
}
public String getSymp_name() {
    return symp_name;
}
public String getSymp_part() {
    return symp_part;
}

public String getSymp_desc() {
    return symp_desc;
}

}

然而,我收到错误说

  

java.lang.NullPointerException:尝试调用虚方法&#39; java.lang.String java.lang.Object.toString()&#39;在null对象引用上                         在android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:409)                         在android.widget.ArrayAdapter.getView(ArrayAdapter.java:371)                         在android.support.v7.app.AlertController $ AlertParams $ 1.getView(AlertController.java:889)                         在android.widget.AbsListView.obtainView(AbsListView.java:2360)                         在android.widget.ListView.measureHeightOfChildren(ListView.java:1326)                         在android.widget.ListView.onMeasure(ListView.java:1233)

我花了好几个小时试图找出这个错误但却失败了。根据我的理解,这不起作用,因为if语句根本没有执行。这就是为什么没有为症状分配任何值,它变为“无效”的原因。值。但是如果看一下条件,它应该可以正常工作,因为我的partsSelect是一个与getSymp_part()返回类型相同的String变量。感谢那些愿意提供帮助的人。

更新

我让alertDialog工作但仍面临一些问题,我将代码更改为

CharSequence[] symptom = new CharSequence[4]; //this because I know the size of an array
            int x = 0;
            for(int i = 0 ; i < spart.size(); i++)
            {
                if(spart.get(i).getSymp_part().equals(partsSelect))
                {
                    symptom[x] = spart.get(i).getSymp_name();
                    x++;
                }
            }

在CharSequnce数组中,我将4设置为其大小。我想动态设置它的大小应该遵循UserData中可用的symptom_name的数量。 我已经设置好了这个

int x = 0;
CharSequence[] symptom = new CharSequence[x]; 
for(int i = 0 ; i < spart.size(); i++)
{
if(spart.get(i).getSymp_part().equals(partsSelect))
 {
  CharSequence[] symptom = new CharSequence[x+1]; 
  symptom[x] = spart.get(i).getSymp_name();
  x++;
 }
}

这样当条件为真时它会增加大小。不幸的是,它仍然会出现同样的错误。

0 个答案:

没有答案