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
как теперь из 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;
}
}
Комментариев нет:
Отправить комментарий