Что не так в моем коде, и как подтянуть навыки?
Тебе все правильно написали.
Мой тебе совет лезть в гитхаб, качать оттуда проекты и смотреть их механику.
Прежде чем лабать код смотрим на исходные данные.
У тебя это json, открываем и смотрим.
Мы видим массив одинаковых объектов. Для нашего удобства
сообразим класс под json'овские данныеclass Product {
int id;
String name;
String picture;
String description;
}
Теперь нам нужно в активити их распарсить в список.
У тебя есть объект с методом new JSONReadFromAsset().readJsonFromAsset(getApplicationContext());
который возвращает json массив, а если заказчик завтра даст два таких файла !?
мы же не хотим копипастить, а сделаем универсально и метод парсера будет возвращать сразу массив объектов, а не json данные и тогда мы выкинем лишние сущностиArrayList<String> nameList = new ArrayList<String>();
ArrayList<Integer> idList = new ArrayList<Integer>();
а вставим только один списокList<Product> mDataList
и тогда мы будем получать данныеmDataList = JSONReadFromAsset.readJsonFromAsset(getApplicationContext(),"questions.json");
Сделаем readJsonFromAsset статиком, так как JSONReadFromAsset ничего в себе не несет.
в readJsonFromAsset должно быть что-то, вроде, такогоreadJsonFromAsset() {
List<Product> dataList = new LinkedList();
for () {
Product product = new Product();
obj = jsonArray.getJSONObject(position);
product.id = obj.getInt("id");
product.name = obj.getString("name");
product.description = obj.getString("description");
product.picture = obj.getString("picture");
dataList.add(product);
}
return dataList; 
}
вместо методов getString, getInt я предпочитаю использовать optString, optInt
Вариантов парсинга данных много, можно изворачиваться по разному.
А что бы показать что ты крут, можно сделать класс Product Parcelable
и не передавать пачку строк через бандл в интенте, а передать сразу Product объект.bundle.putParcelable(SomeActivity.PRODUCT, mDataList.get(position));
В другом активити принять и с ним работать.
Можно вот так сделать 
public static final String LINK =  "ironwaterstudio.com";
и поместить в легко доступное место или завести отдельный классclass Static {
public static final String LINK =  "http://ironwaterstudio.com";
}
AlertDialog - насколько тебе необходимо обрабатывать setNegativeButton, попробуй не передавать обработчик кнопки, а сунуть null
согласен с предыдущим оратором.
вроде есть некие сущности , как продукты.
но нет их моделей.