Android 无法应用Arraylist

Android 无法应用Arraylist,android,arraylist,Android,Arraylist,我正在尝试获取密码描述文本输入,以填充我的应用程序的数组视图 不幸的是,在我的while部分(cursor.movetoNext())中,我的字符串不能应用于arraylist。我正在尝试确定在updateList方法中更改什么以适应我的密码项 这是我的updatelist方法 private void updateList(){ ArrayList<String> tasklist = new ArrayList<>();

我正在尝试获取密码描述文本输入,以填充我的应用程序的数组视图

不幸的是,在我的while部分(cursor.movetoNext())中,我的字符串不能应用于arraylist。我正在尝试确定在updateList方法中更改什么以适应我的密码项

这是我的updatelist方法

   private void updateList(){
           ArrayList<String> tasklist = new ArrayList<>();
           SQLiteDatabase db = mHelper.getReadableDatabase();
           Cursor cursor = db.query( PasswordContract.PasswordEntry.TABLE, new String[]{PasswordContract.PasswordEntry._ID, PasswordContract.PasswordEntry.COL_PASSWORD, PasswordContract.PasswordEntry.COL_PASS_DESC},
                   null, null, null, null, null);

           while (cursor.moveToNext()){
               String password = cursor.getString(cursor.getColumnIndex(PasswordContract.PasswordEntry.COL_PASSWORD));
               String description = cursor.getString(cursor.getColumnIndex(PasswordContract.PasswordEntry.COL_PASS_DESC));
               tasklist.add(new PasswordItem(password, description));

if (mAdapter == null){
           mAdapter = new ArrayAdapter<>(this,
                   R.layout.item_password,
                   R.id.password,
                   R.id.password_description,
                   tasklist);
           mPasswordListView.setAdapter(mAdapter);
}else{
           mAdapter.clear();
           mAdapter.addAll(String.valueOf(tasklist));
           mAdapter.notifyDataSetChanged();
       }
       cursor.close();
       db.close();
public class CustomAdapter extends ArrayAdapter<String>{

    private Context mContext;
    private List<String> mStringList;
    public CustomAdapter(Context context, List<String> mStringList) {
        super(context, R.layout.item_password);
        this.mContext = context;
        this.mStringList = new ArrayList<>();
        this.mStringList = mStringList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.item_password, parent, false);

        TextView your_first_text_view = (TextView) convertView.findViewById(R.id.password);
        TextView your_second_text_view = (TextView) convertView.findViewById(R.id.password_description);

        your_first_text_view.setText(mStringList.get(position));
        your_second_text_view.setText(mStringList.get(position));
        return convertView;
    }
private void updateList(){
ArrayList tasklist=新建ArrayList();
SQLiteDatabase db=mHelper.getReadableDatabase();
Cursor Cursor=db.query(PasswordContract.PasswordEntry.TABLE,新字符串[]{PasswordContract.PasswordEntry.\u ID,PasswordContract.PasswordEntry.COL\u PASSWORD,PasswordContract.PasswordEntry.COL\u PASS\u DESC},
空,空,空,空,空,空);
while(cursor.moveToNext()){
字符串密码=cursor.getString(cursor.getColumnIndex(PasswordContract.PasswordEntry.COL_password));
String description=cursor.getString(cursor.getColumnIndex(PasswordContract.PasswordEntry.COL_PASS_DESC));
添加(新密码项(密码、说明));
if(mAdapter==null){
mAdapter=新阵列适配器(此,
R.layout.item_密码,
R.id.password,
R.id.password\u说明,
任务清单);
mPasswordListView.setAdapter(mAdapter);
}否则{
mAdapter.clear();
mAdapter.addAll(String.valueOf(tasklist));
mAdapter.notifyDataSetChanged();
}
cursor.close();
db.close();
我正在尝试找出如何将customadapter连接到updatelist方法

   private void updateList(){
           ArrayList<String> tasklist = new ArrayList<>();
           SQLiteDatabase db = mHelper.getReadableDatabase();
           Cursor cursor = db.query( PasswordContract.PasswordEntry.TABLE, new String[]{PasswordContract.PasswordEntry._ID, PasswordContract.PasswordEntry.COL_PASSWORD, PasswordContract.PasswordEntry.COL_PASS_DESC},
                   null, null, null, null, null);

           while (cursor.moveToNext()){
               String password = cursor.getString(cursor.getColumnIndex(PasswordContract.PasswordEntry.COL_PASSWORD));
               String description = cursor.getString(cursor.getColumnIndex(PasswordContract.PasswordEntry.COL_PASS_DESC));
               tasklist.add(new PasswordItem(password, description));

if (mAdapter == null){
           mAdapter = new ArrayAdapter<>(this,
                   R.layout.item_password,
                   R.id.password,
                   R.id.password_description,
                   tasklist);
           mPasswordListView.setAdapter(mAdapter);
}else{
           mAdapter.clear();
           mAdapter.addAll(String.valueOf(tasklist));
           mAdapter.notifyDataSetChanged();
       }
       cursor.close();
       db.close();
public class CustomAdapter extends ArrayAdapter<String>{

    private Context mContext;
    private List<String> mStringList;
    public CustomAdapter(Context context, List<String> mStringList) {
        super(context, R.layout.item_password);
        this.mContext = context;
        this.mStringList = new ArrayList<>();
        this.mStringList = mStringList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.item_password, parent, false);

        TextView your_first_text_view = (TextView) convertView.findViewById(R.id.password);
        TextView your_second_text_view = (TextView) convertView.findViewById(R.id.password_description);

        your_first_text_view.setText(mStringList.get(position));
        your_second_text_view.setText(mStringList.get(position));
        return convertView;
    }
公共类CustomAdapter扩展了ArrayAdapter{
私有上下文;
私有列表mStringList;
公共CustomAdapter(上下文上下文,列表mStringList){
super(上下文、右布局、项目\密码);
this.mContext=上下文;
this.mStringList=新的ArrayList();
this.mStringList=mStringList;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutInflater充气器=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(R.layout.item_密码,父项,false);
TextView您的_first_text_view=(TextView)convertView.findViewById(R.id.password);
TextView您的第二个文本视图=(TextView)convertView.findViewById(R.id.password\u description);
您的第一个文本视图.setText(mStringList.get(position));
您的第二个文本视图.setText(mStringList.get(position));
返回视图;
}

将项目添加到arraylist时,项目的类型必须与定义的项目的类型相同。您使用类型字符串定义了arraylist,但向其添加了PasswordItem对象。 将arraylist类型改为保留PasswordItem:

ArrayList<PasswordItem> tasklist
ArrayList任务列表

将项目添加到arraylist时,项目的类型必须与定义的项目的类型相同。您使用类型字符串定义了arraylist,但向其添加了PasswordItem对象。 将arraylist类型改为保留PasswordItem:

ArrayList<PasswordItem> tasklist
ArrayList任务列表

您使用的是POJO类而不是字符串,因此需要对适配器和列表类型进行必要的更改

用这个

ArrayList<PasswordItem> tasklist = new ArrayList<>(); 
在你的适配器里

public class CustomAdapter extends ArrayAdapter<PasswordItem>{
//                                              ^^^^^^^
    private Context mContext;
    private List<PasswordItem> mStringList;
    //            ^^^^^^^
    public CustomAdapter(Context context, int resource , List<PasswordItem> mStringList) {
        super(context, resource , mStringList);
        this.mContext = context;
        //this.mStringList = new ArrayList<>(); not required 
        this.mStringList = mStringList;
    }

    public updateList(List<PasswordItem> mStringList){
         this.mStringList = mStringList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.item_password, parent, false);

        TextView your_first_text_view = (TextView) convertView.findViewById(R.id.password);
        TextView your_second_text_view = (TextView) convertView.findViewById(R.id.password_description);

        your_first_text_view.setText(mStringList.get(position).password);
       //  use your getter or field names of POJO class
        your_second_text_view.setText(mStringList.get(position).description);
        return convertView;
    }

您使用的是POJO类not string,因此需要对适配器和列表类型进行必要的更改

用这个

ArrayList<PasswordItem> tasklist = new ArrayList<>(); 
在你的适配器里

public class CustomAdapter extends ArrayAdapter<PasswordItem>{
//                                              ^^^^^^^
    private Context mContext;
    private List<PasswordItem> mStringList;
    //            ^^^^^^^
    public CustomAdapter(Context context, int resource , List<PasswordItem> mStringList) {
        super(context, resource , mStringList);
        this.mContext = context;
        //this.mStringList = new ArrayList<>(); not required 
        this.mStringList = mStringList;
    }

    public updateList(List<PasswordItem> mStringList){
         this.mStringList = mStringList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.item_password, parent, false);

        TextView your_first_text_view = (TextView) convertView.findViewById(R.id.password);
        TextView your_second_text_view = (TextView) convertView.findViewById(R.id.password_description);

        your_first_text_view.setText(mStringList.get(position).password);
       //  use your getter or field names of POJO class
        your_second_text_view.setText(mStringList.get(position).description);
        return convertView;
    }

Pavneet,差不多了。我已经在updatelist方法中添加了if和else语句。我已经更新了我的帖子来显示它们。arrayadapter告诉我们不能推断参数。你知道是什么原因吗?它仍然说arrayadapter无法应用。你已经回答了我的第一个问题。这就足够了。错误:(120,23)错误:无法推断ArrayAdapterError:task:app:CompiledBugJavaWithJavaC.>的执行失败;编译失败;有关详细信息,请参阅编译器错误输出。Pavneet,就在那里。我已在updatelist方法上添加了if和else语句。我已更新帖子以显示它们。arrayadapter告诉我们无法推断argum你知道这是什么原因吗?它仍然说arrayadapter无法应用。你已经回答了我的第一个问题。这就满足了我的疑问。:)错误:(120,23)错误:无法推断ArrayAdapterError的类型参数:任务:app:CompiledBugJavaWithJavaC“”的执行失败>编译失败;有关详细信息,请参阅编译器错误输出。