Advertisement
Guest User

Untitled

a guest
Feb 21st, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.58 KB | None | 0 0
  1. E/AndroidRuntime: FATAL EXCEPTION: main
  2. Process: com.santossingh.capstoneproject, PID: 9157
  3. java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
  4. at java.util.ArrayList.<init>(ArrayList.java:171)
  5. at com.santossingh.capstoneproject.Fragments.BaseFragment$1.onResponse(BaseFragment.java:113)
  6. at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
  7. at android.os.Handler.handleCallback(Handler.java:751)
  8. at android.os.Handler.dispatchMessage(Handler.java:95)
  9. at android.os.Looper.loop(Looper.java:154)
  10. at android.app.ActivityThread.main(ActivityThread.java:6077)
  11. at java.lang.reflect.Method.invoke(Native Method)
  12. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
  13. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
  14.  
  15. public class BaseFragment extends Fragment {
  16.  
  17. RecyclerView recyclerView;
  18. private RetrofitManager retrofitManager;
  19. private List<Work> resultsList;
  20. private GRecyclerViewAdapter recyclerViewAdapter;
  21. private View view;
  22. private OnFragmentInteractionListener mListener;
  23.  
  24. public BaseFragment() {
  25. }
  26.  
  27. @Override
  28. public void onCreate(Bundle savedInstanceState) {
  29. super.onCreate(savedInstanceState);
  30. }
  31.  
  32. @Override
  33. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  34. Bundle savedInstanceState) {
  35. view= inflater.inflate(R.layout.fragment_base, container, false);
  36.  
  37. resultsList=new ArrayList<Work>();
  38. configRecycleView();
  39. makeService();
  40. return view;
  41. }
  42.  
  43. private void configRecycleView() {
  44. recyclerViewAdapter = new GRecyclerViewAdapter(getContext(), resultsList, mListener);
  45. recyclerView = (RecyclerView) view.findViewById(R.id.recycleView);
  46. AutofitGridlayout autofitGridlayout = new AutofitGridlayout(getActivity(), 260);
  47. recyclerView.setLayoutManager(autofitGridlayout);
  48. recyclerView.setAdapter(recyclerViewAdapter);
  49. }
  50. public void makeService() {
  51. retrofitManager=new RetrofitManager();
  52. Call<Results> listCall;
  53. listCall = retrofitManager.getXMLData().getBooks();
  54. listCall.enqueue(new Callback<Results>() {
  55. @Override
  56. public void onResponse(Call<Results> call, Response<Results> response) {
  57. if (response.isSuccessful()) {
  58. List<Work> work=response.body().getWorks();
  59. resultsList=new ArrayList<Work>(work);
  60.  
  61. if (resultsList != null) {
  62. recyclerViewAdapter.addList(resultsList);
  63. Toast.makeText(getContext(), "XML Successfully fetched", Toast.LENGTH_LONG).show();
  64. } else {
  65. Toast.makeText(getActivity(), "Null Value", Toast.LENGTH_SHORT).show();
  66. }
  67. }
  68. }
  69. @Override
  70. public void onFailure(Call<Results> call, Throwable t) {
  71. Toast.makeText(getContext(), t.getMessage(), Toast.LENGTH_LONG).show();
  72. Log.e("error",t.getMessage());
  73. t.printStackTrace();
  74. }
  75. });
  76. }
  77.  
  78. @Override
  79. public void onAttach(Context context) {
  80. super.onAttach(context);
  81. if (context instanceof OnFragmentInteractionListener) {
  82. mListener = (OnFragmentInteractionListener) context;
  83. } else {
  84. throw new RuntimeException(context.toString()
  85. + " must implement OnFragmentInteractionListener");
  86. }
  87. }
  88.  
  89. @Override
  90. public void onDetach() {
  91. super.onDetach();
  92. mListener = null;
  93. }
  94.  
  95. public interface OnFragmentInteractionListener {
  96. void onFragmentInteraction(Work mData);
  97. void onFragmentInteraction(Item mData);
  98. }
  99. }
  100.  
  101. public class GRecyclerViewAdapter extends RecyclerView.Adapter<GRecyclerViewAdapter.ViewHolder> {
  102.  
  103. private List<Work> workList=new ArrayList<Work>();
  104.  
  105. private BaseFragment.OnFragmentInteractionListener mListener;
  106. private Context context;
  107. private float AspectRatio = 0.73f;
  108.  
  109. public GRecyclerViewAdapter(Context context, List<Work> itemList, BaseFragment.OnFragmentInteractionListener listener) {
  110. this.context = context;
  111. workList=itemList;
  112. mListener = listener;
  113. }
  114.  
  115. @Override
  116. public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  117. View view = LayoutInflater.from(parent.getContext())
  118. .inflate(R.layout.fragment_item, parent, false);
  119. return new ViewHolder(view);
  120. }
  121.  
  122. @Override
  123. public void onBindViewHolder(final ViewHolder holder, final int position) {
  124.  
  125. holder.work = workList.get(position);
  126. holder.dynamicImageView.setImageUrl((holder.work.getImage()),
  127. ImageLoaderHelper.getInstance(context).getImageLoader());
  128. holder.dynamicImageView.setAspectRatio(AspectRatio);
  129. holder.mIdView.setText(holder.work.getTitle());
  130.  
  131. holder.mView.setOnClickListener(new View.OnClickListener() {
  132. @Override
  133. public void onClick(View v) {
  134.  
  135. if (null != mListener) {
  136. // Notify the active callbacks interface (the activity, if the
  137. // fragment is attached to one) that an item has been selected.
  138. mListener.onFragmentInteraction(holder.work);
  139. }
  140. }
  141. });
  142. }
  143.  
  144. @Override
  145. public int getItemCount() {
  146. return workList.size();
  147. }
  148.  
  149. public void addList(List<Work> workList) {
  150. this.workList = workList;
  151. notifyDataSetChanged();
  152. }
  153.  
  154. public class ViewHolder extends RecyclerView.ViewHolder {
  155. public final View mView;
  156. public final TextView mIdView;
  157. private final DynamicHeightNetworkImageView dynamicImageView;
  158. private Work work;
  159.  
  160. public ViewHolder(View view) {
  161. super(view);
  162. mView = view;
  163. dynamicImageView = (DynamicHeightNetworkImageView) view.findViewById(R.id.thumbnail);
  164. mIdView = (TextView) view.findViewById(R.id.Title);
  165. }
  166. }
  167. }
  168.  
  169. @Root (name = "results", strict = false)
  170. public class Results {
  171.  
  172. @ElementList(required = false)
  173. public List<Work> works;
  174.  
  175. public Results(List<Work> works) {
  176. this.works = works;
  177. }
  178. public List<Work> getWorks() {
  179. return works;
  180. }
  181. public void setWorks(List<Work> works) {
  182. this.works = works;
  183. }
  184.  
  185. public Results() {
  186. }
  187. }
  188.  
  189. @Root(name = "work", strict = false)
  190. public class Work {
  191.  
  192. @Path("best_book")
  193. @Element(name = "id")
  194. private String id;
  195.  
  196. @Path("best_book")
  197. @Element (name = "title")
  198. private String title;
  199.  
  200. @Path("best_book/author")
  201. @Element(name = "name")
  202. private String author;
  203.  
  204. @Path("best_book")
  205. @Element (name = "image_url")
  206. private String image;
  207.  
  208. public String getId() {
  209. return id;
  210. }
  211.  
  212. public void setId(String id) {
  213. this.id = id;
  214. }
  215.  
  216. public String getTitle() {
  217. return title;
  218. }
  219.  
  220. public void setTitle(String title) {
  221. this.title = title;
  222. }
  223.  
  224. public String getAuthor() {
  225. return author;
  226. }
  227.  
  228. public void setAuthor(String author) {
  229. this.author = author;
  230. }
  231.  
  232. public String getImage() {
  233. return image;
  234. }
  235.  
  236. public void setImage(String image) {
  237. this.image = image;
  238. }
  239.  
  240. public Work(String id, String title, String author, String image) {
  241. this.id = id;
  242. this.title = title;
  243. this.author = author;
  244. this.image = image;
  245. }
  246. }
  247.  
  248. public class RetrofitManager implements GoodReadsService{
  249.  
  250. public static final String API_BASE_URL = "https://www.goodreads.com/";
  251. private GoodReadsAPI goodReadsAPI;
  252.  
  253. public void RetrofitOutput(){
  254. Retrofit retrofit = new Retrofit.Builder()
  255. .baseUrl(API_BASE_URL)
  256. .client(new OkHttpClient())
  257. .addConverterFactory(SimpleXmlConverterFactory.create())
  258. .build();
  259. if (retrofit!=null){
  260. Log.i("Data Fetch","Yes");
  261. }
  262.  
  263. goodReadsAPI=retrofit.create(GoodReadsAPI.class);
  264. if (goodReadsAPI!=null){
  265. Log.i("Data","Yes");
  266. }else {
  267. Log.e("Error","No");
  268. }
  269.  
  270. }
  271.  
  272. @Override
  273. public GoodReadsAPI getXMLData() {
  274. if (goodReadsAPI==null){
  275. RetrofitOutput();
  276. }
  277. return goodReadsAPI;
  278. }
  279. }
  280.  
  281. public interface GoodReadsAPI {
  282. @GET(Constants.path+Constants.apiKey+Constants.BUSINESS)
  283. Call<Results> getBooks();
  284. }
  285.  
  286. public interface GoodReadsService {
  287. GoodReadsAPI getXMLData();
  288. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement