Страницы

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

среда, 3 апреля 2019 г.

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

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" } ]}


Ответ

В общем проблема состоит из двух частей:
Во-первых, надо взять ссылку. После работы 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; } }

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

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