Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayAdapter仅在列表视图中显示上次添加的缩略图_Java_Android_Listview_Android Arrayadapter - Fatal编程技术网

Java ArrayAdapter仅在列表视图中显示上次添加的缩略图

Java ArrayAdapter仅在列表视图中显示上次添加的缩略图,java,android,listview,android-arrayadapter,Java,Android,Listview,Android Arrayadapter,在我的应用程序中,我有一个显示员工的列表视图,每个项目都有自己的名称、电子邮件和缩略图。除了缩略图,一切都很好。My ArrayAdapter不是将所有员工档案图片显示为缩略图,而是如下所示: 显示所有默认图片,当用户未为特定员工选择任何图片时,会自动选择默认图片。默认图片位于drawable文件夹中:android。resource://com.witchking.modiryar/ +R.drawable.default\u pic; 是否将上次插入的员工图片显示为缩略图 如果我回到上一个活

在我的应用程序中,我有一个显示员工的列表视图,每个项目都有自己的名称、电子邮件和缩略图。除了缩略图,一切都很好。My ArrayAdapter不是将所有员工档案图片显示为缩略图,而是如下所示:

显示所有默认图片,当用户未为特定员工选择任何图片时,会自动选择默认图片。默认图片位于drawable文件夹中:android。resource://com.witchking.modiryar/ +R.drawable.default\u pic; 是否将上次插入的员工图片显示为缩略图 如果我回到上一个活动并返回列表,列表甚至不会显示最后一张图片。 如果我有两个或更多的员工具有相同的图片,并且我再次创建了另一个具有相同图片的员工,列表将显示具有与上次插入的员工图片相同图片的所有员工! 下面是一张图片,让您更好地了解我面临的问题:

我的适配器问题:

员工哈利·波特添加了默认图片 员工佛罗多·巴金斯添加了名为A的图片 返回主要活动并返回此活动后的员工列表 员工钢铁侠添加了名为B的图片 员工超人再次添加了名为A的图片 这是我的密码:

ArrayAdapter getView方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View myView = convertView;
    String path ="android.resource://com.witchking.modiryar/" + R.drawable.default_pic;
    Uri uri = null;

    if (myView == null)
    {
        LayoutInflater layoutInflater;
        layoutInflater = LayoutInflater.from(getContext());
        myView = layoutInflater.inflate(R.layout.item_listviewitem, null);
    }

    PersonHandler myPerson = getItem(position);
    if (myPerson != null){
        TextView firstLine = (TextView) myView.findViewById(R.id.firstLine);
        TextView secondLine = (TextView) myView.findViewById(R.id.secondLine);
        ImageView profilePicture = (ImageView) myView.findViewById(R.id.icon);

        if (myPerson.getPersonProfilePictureUrl() != null){
            uri = Uri.parse(myPerson.getPersonProfilePictureUrl());
        }else {
            uri = Uri.parse(myPerson.getPersonProfilePictureUrl());
        }

        firstLine.setText(myPerson.getPersonFullName());
        profilePicture.setImageURI(uri);

        switch (personType)
        {
            case 'S': //person type student
                secondLine.setText(myPerson.getPersonStudentNumber());
                break;
            case 'E': //person type employee
                secondLine.setText(myPerson.getPersonEmail());
                break;
            case 'M': //person type Masters
                secondLine.setText(myPerson.getPersonEmail());
                break;
        }
    }
    return myView;
}
PersonHandler是一个类,用于根据不同活动中的人员类型处理查询。下面是getPersonList方法:

    public List<PersonHandler> getPersonList(SQLiteDatabase sqldb, char personType){
    Cursor cursor;
    String fullName = null;
    String stdNumber = null;
    String email = null;
    String query = null;
    String path = "android.resource://com.witchking.modiryar/" + R.drawable.exclamation;
    String[] columnName = new String[3];

    List<PersonHandler> listPerson=new ArrayList<PersonHandler>();

    /*
    * dar in ghesmat query motenaseb ba personType
    * ejra migardad
    * query selected by person type
    */

    switch (personType) {
        case 'S':
            query = "select * from " + "tbl_Students";

            break;
        case 'E':
            query = "select * from " + "tbl_Employees";
            break;
        case 'M':
            query = "select * from " + "tbl_Master";
            break;
    }

    cursor = sqldb.rawQuery(query, null);



    /*
    * dar in ghesmat barname check mikonad ke agar cursor khali bood
    * yani hich daneshjoo, karmand, ya ostadi add nashode
    * pas bar asase personType tasmim migirad ke peyghame monaseb ra namayesh dahad
    * checking if cursor is null and displaying proper message
    * the message is added as an item in list
    */

    int cnt = cursor.getCount();

    if (cursor.getCount() <= 0){
        PersonHandler newPerson=new PersonHandler();
        newPerson.setPersonProfilePictureUrl(path);

        switch (personType) {
            case 'S':
                fullName = "هیچ دانشجویی اضافه نشده";
                stdNumber = "از منو گزینه دانشجوی جدید را انتخاب نمایید";
                newPerson.setPersonFullName(fullName);
                newPerson.setPersonStudentNumber(stdNumber);
                break;
            case 'E':
                fullName = "هیچ کارمندی اضافه نشده";
                email = "از منو گزینه کارمند جدید را انتخاب نمایید";
                newPerson.setPersonFullName(fullName);
                newPerson.setPersonEmail(email);
                break;
            case 'M':
                fullName = "هیچ استادی اضافه نشده";
                email = "از منو گزینه استاد جدید را انتخاب نمایید";
                newPerson.setPersonFullName(fullName);
                newPerson.setPersonEmail(email);
                break;
        }

        listPerson.add(newPerson);

        /*
        * dar in ghesmat bar asase personType barname tasmim migirad
        * ke field haye monasb ra bar asase query voroodi az cursor
        * farakhani konad
        * if cursor is not null, app selects proper columns based on person type
        */
    }else {
        cursor.moveToFirst();

        while (!cursor.isAfterLast()){
            PersonHandler newPerson=new PersonHandler();

            switch (personType) {
                case 'S':
                    newPerson.setPersonFirstName(cursor.getString(1));  //First Name Column
                    newPerson.setPersonLastName(cursor.getString(2));   //Last Name Column
                    newPerson.setPersonEmail(cursor.getString(5));      //Email or StudentNumber Column
                    newPerson.setPersonProfilePictureUrl(cursor.getString(7));  //Picture Url Column
                    break;
                case 'E':
                    newPerson.setPersonFirstName(cursor.getString(1));  //First Name Column
                    newPerson.setPersonLastName(cursor.getString(2));   //Last Name Column
                    newPerson.setPersonEmail(cursor.getString(3));      //Email or StudentNumber Column
                    newPerson.setPersonProfilePictureUrl(cursor.getString(7));  //Picture Url Column
                    break;
                case 'M':
                    newPerson.setPersonFirstName(cursor.getString(1));  //First Name Column
                    newPerson.setPersonLastName(cursor.getString(2));   //Last Name Column
                    newPerson.setPersonEmail(cursor.getString(3));      //Email or StudentNumber Column
                    newPerson.setPersonProfilePictureUrl(cursor.getString(7));  //Picture Url Column
                    break;
            }

            newPerson.setPersonFullName(newPerson.getPersonFirstName() + " " + newPerson.getPersonLastName());
            listPerson.add(cursor.getPosition(), newPerson);

            cursor.moveToNext();
            newPerson = null;
        }
    }
    return listPerson;
}
最后是我在活动中的onCreate方法:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_employees);
    context = this;
    SQLiteDatabase myDB = openOrCreateDatabase("ModirYar.db", MODE_PRIVATE, null);

    char personType = 'E';

    PersonHandler EmployeePerson = new PersonHandler();
    List<PersonHandler> myPerson = new ArrayList<PersonHandler>();
    myPerson = EmployeePerson.getPersonList(myDB, personType);
    //get the list view reference
    listViewEmployeesList = (ListView) findViewById(R.id.lstView_Employees);

    sampleListAdapter myAdapter = new sampleListAdapter(this, R.layout.item_listviewitem, myPerson);
    myAdapter.personType = personType;
    listViewEmployeesList.setAdapter(myAdapter);

}
我真的很困惑。是什么导致了这个问题?
提前感谢…

尝试使用通用图像加载器从drawable加载图像。 像这样的:

ImageLoader.getInstance().displayImage(context, "drawable://" + uri, profilePicture);

uri中只有资源id。

使用通用图像加载器。@vipulmittal我实际上已经发布了一个关于毕加索更好的解决方案的答案,相信我,我自己也曾是UIL的粉丝,但后来我意识到OP不是从互联网上加载的。你是对的。但是,如果所有图像都是可绘制的,那么只需设置ImageResourcer.drawable.Equiremon就足够了。UIL也可以使用可绘制的图像,请检查下面的代码。感谢您的回复@vipulmittal不,并非所有图像都是可绘制的,唯一可绘制的图像是默认图像,即波特的图像。其他由用户从库中选择。UIL也适用于此吗?实际上我是UIL新手,我应该将UIL设置放在适配器构造函数中吗?我已经这样做了,然后替换了profilePicture.setImageURIuri;使用imageLoader.displayImageuri.toString,profilePicture;在getView方法中。但应用程序崩溃了。它说不幸的是,应用程序停止了工作。我猜这是profilePicture的逻辑错误。我跟踪了它,但无法找出错误发生的地方。我甚至将path变量传递给它的stringuri参数,但即使使用drawable中的默认图片,仍然没有结果。