Преобразовать строку, содержащую пути URI, в массив <uri> - PullRequest
0 голосов
/ 18 ноября 2018

Я создаю программу для блокнота, где пользователь может добавлять изображения в свои заметки. Когда он создает новую заметку и выбирает несколько изображений, их пути (uri) сохраняются в массиве, который преобразуется в тег XML (преобразование строкового типа). Когда пользователь хочет открыть созданную заметку, выбранные изображения отображаются в виде сетки. Однако, когда я пытаюсь преобразовать строковый тег из XML-файла в массив списков, чтобы imageadapter мог поместить их в сетку, я получаю ошибки о типах преобразования. edit полученная ошибка: -java.lang.String не может быть приведена к android.net.Uri-

Адаптер это

`private Context ctx;
    private int pos;
    private LayoutInflater inflater;
    private ImageView ivGallery;
    ArrayList<Uri> mArrayUri;
    public GalleryAdapter(Context ctx, ArrayList<Uri> mArrayUri) {


        this.ctx = ctx;
        this.mArrayUri = mArrayUri;
    }

    @Override
    public int getCount() {
        return mArrayUri.size();
    }

    @Override
    public Object getItem(int position) {
        return mArrayUri.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        pos = position;
        inflater = (LayoutInflater) ctx
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View itemView = inflater.inflate(R.layout.gv_item, parent, false);

        ivGallery = (ImageView) itemView.findViewById(R.id.ivGallery);

        ivGallery.setImageURI(mArrayUri.get(position));

        return itemView;
    }`

и способ, которым я пытаюсь преобразовать их в массив и показать их в виде сетки, это

`  String Paths = userData.get(1);


            ArrayList mArrayUri = new ArrayList<>(Arrays.asList(Paths.split(",")));
            galleryAdapter = new GalleryAdapter(getApplicationContext(),mArrayUri);
            gvGallery.setAdapter(galleryAdapter);
            gvGallery.setVerticalSpacing(gvGallery.getHorizontalSpacing());
            ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) gvGallery
                    .getLayoutParams();
            mlp.setMargins(0, gvGallery.getHorizontalSpacing(), 0, 0);

`

Код создания xml:

` xmlSerializer.startDocument("UTF-8", true);
            xmlSerializer.startTag(null, "userData");
            xmlSerializer.startTag(null,"Text");
            xmlSerializer.text(NoteText);
            xmlSerializer.endTag(null, "Text");
            xmlSerializer.startTag(null,"Image Paths");
            xmlSerializer.text(String.valueOf(Gallery.ImagePaths));
            xmlSerializer.endTag(null,"Image Paths" );
            xmlSerializer.endTag(null, "userData");
            xmlSerializer.endDocument();`

1 Ответ

0 голосов
/ 19 ноября 2018

Ваш код довольно хорош, просто сделайте строку типа списка массивов и затем примите строковое значение uri.

В .text(String.valueof(Imagepath)) используйте Uri.toString вместо String valueof

Пример:

Uri uri;
String myUriString;
myUriString = uri.toString();
...