Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

не понимаю как вытащить данные дальше?

#java #android #json #xml


public class Fragment_photo extends Fragment {

    private ImageView nameImage;
    private  Subject mSubject;
    private  Content content;

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

        AssetManager mgr=getActivity().getAssets();
        ObjectMapper mapper= new ObjectMapper();

        try {
            InputStream inputStream;
            inputStream = mgr.open("numbers.xml");
            mSubject = mapper.readValue(inputStream, Subject.class);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_photo, container, false);

        nameImage = (ImageView) v.findViewById(R.id.name_image);

      nameImage.setImageURI(Uri.parse(??? ));
        return v;
    }


}


другой класс 

public class Content {
    public  String signature;
    public  String photos;
    public  String sounds;
}


и еще один 

public class Subject {
    public String name;
    public ArrayList content;
}


как теперь из mSubject  вытащить данные  и вставить в ImageView картинку? 
P.S.  как выглядят данные в mSubject ??
 сам файл 

{
"name": "numbers",
"content": [{
"photos": "file:///android_asset/numbers/1.jpg",
"signature": "Один",
"sounds": "file:///android_asset/numbers/1.wav"
},
{
"photos": "file:///android_asset/numbers/2.jpg",
"signature": "Два",
"sounds": "file:///android_asset/numbers/2.wav"
}
]}

    


Ответы

Ответ 1



В общем проблема состоит из двух частей: Во-первых, надо взять ссылку. После работы Jackson вы получите Subject mSubject, и для того файла, который вы привели, сработает такое: String ref = mSubject.content.get(0).photos; Естественно, надо проверять, что в списке есть элементы, возможно следует проверить наличие самого списка и вообще mSubject. Во-вторых, полученную ссылку (file:///android_asset/numbers/1.jpg) не может обработать imageView.setImageUri(..). Вернее он может, но будет искать файл в файловой системе, по пути /android_asset/number/1.jpg и не найдет, т.к. файл у вас скорее всего лежит в assets, где-то рядом с numbers.xml. Насколько я понял, ссылки на assets вида file:///android_asset/.. понимают только WebView и библиотека Picasso (там отдельный обработчик). Можно вынуть файл из Assets вручную, каким-то таким способом: public class Fragment_photo extends Fragment { private ImageView nameImage; private Subject mSubject; private Content content; // новое поле для картинки private Drawable drawableView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AssetManager mgr=getActivity().getAssets(); ObjectMapper mapper= new ObjectMapper(); try { // ваш код в onCreate InputStream inputStream; inputStream = mgr.open("numbers.xml"); mSubject = mapper.readValue(inputStream, Subject.class); // достаем ссылку Uri imgUri = Uri.parse(mSubject.content.get(0).photos); // обрезка ссылки до состояния 'numbers/1.jpg' InputStream stream = mgr.open( imgUri.getPath().substring("/android_asset/".length()) ); drawableView = Drawable.createFromStream(stream, null); } catch (IOException e) { e.printStackTrace(); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_photo, container, false); nameImage = (ImageView) v.findViewById(R.id.name_image); nameImage.setImageDrawable(drawableView); return v; } }

Ответ 2



Видимо вам надо сделать что-то типа такого: try { InputStream inputStream; inputStream = mgr.open("numbers.xml"); mSubject = mapper.readValue(inputStream, Subject.class); if (mSubject.content != null && mSubject.content.size() != 1) { content = mSubject.content.get(0); } } catch (IOException e) { e.printStackTrace(); } НО! Как вы видите из кода, в списке может не оказаться элементов, это вам надо как-то обрабатывать и элементов в списке может быть больше 1 или 0, с этим тоже что-то надо сделать. Что именно я вам подсказать не могу, это зависит от логики приложения.

Комментариев нет:

Отправить комментарий