Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- E/AndroidRuntime: FATAL EXCEPTION: main
- Process: com.santossingh.capstoneproject, PID: 9157
- java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
- at java.util.ArrayList.<init>(ArrayList.java:171)
- at com.santossingh.capstoneproject.Fragments.BaseFragment$1.onResponse(BaseFragment.java:113)
- at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
- at android.os.Handler.handleCallback(Handler.java:751)
- at android.os.Handler.dispatchMessage(Handler.java:95)
- at android.os.Looper.loop(Looper.java:154)
- at android.app.ActivityThread.main(ActivityThread.java:6077)
- at java.lang.reflect.Method.invoke(Native Method)
- at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
- at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
- public class BaseFragment extends Fragment {
- RecyclerView recyclerView;
- private RetrofitManager retrofitManager;
- private List<Work> resultsList;
- private GRecyclerViewAdapter recyclerViewAdapter;
- private View view;
- private OnFragmentInteractionListener mListener;
- public BaseFragment() {
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- view= inflater.inflate(R.layout.fragment_base, container, false);
- resultsList=new ArrayList<Work>();
- configRecycleView();
- makeService();
- return view;
- }
- private void configRecycleView() {
- recyclerViewAdapter = new GRecyclerViewAdapter(getContext(), resultsList, mListener);
- recyclerView = (RecyclerView) view.findViewById(R.id.recycleView);
- AutofitGridlayout autofitGridlayout = new AutofitGridlayout(getActivity(), 260);
- recyclerView.setLayoutManager(autofitGridlayout);
- recyclerView.setAdapter(recyclerViewAdapter);
- }
- public void makeService() {
- retrofitManager=new RetrofitManager();
- Call<Results> listCall;
- listCall = retrofitManager.getXMLData().getBooks();
- listCall.enqueue(new Callback<Results>() {
- @Override
- public void onResponse(Call<Results> call, Response<Results> response) {
- if (response.isSuccessful()) {
- List<Work> work=response.body().getWorks();
- resultsList=new ArrayList<Work>(work);
- if (resultsList != null) {
- recyclerViewAdapter.addList(resultsList);
- Toast.makeText(getContext(), "XML Successfully fetched", Toast.LENGTH_LONG).show();
- } else {
- Toast.makeText(getActivity(), "Null Value", Toast.LENGTH_SHORT).show();
- }
- }
- }
- @Override
- public void onFailure(Call<Results> call, Throwable t) {
- Toast.makeText(getContext(), t.getMessage(), Toast.LENGTH_LONG).show();
- Log.e("error",t.getMessage());
- t.printStackTrace();
- }
- });
- }
- @Override
- public void onAttach(Context context) {
- super.onAttach(context);
- if (context instanceof OnFragmentInteractionListener) {
- mListener = (OnFragmentInteractionListener) context;
- } else {
- throw new RuntimeException(context.toString()
- + " must implement OnFragmentInteractionListener");
- }
- }
- @Override
- public void onDetach() {
- super.onDetach();
- mListener = null;
- }
- public interface OnFragmentInteractionListener {
- void onFragmentInteraction(Work mData);
- void onFragmentInteraction(Item mData);
- }
- }
- public class GRecyclerViewAdapter extends RecyclerView.Adapter<GRecyclerViewAdapter.ViewHolder> {
- private List<Work> workList=new ArrayList<Work>();
- private BaseFragment.OnFragmentInteractionListener mListener;
- private Context context;
- private float AspectRatio = 0.73f;
- public GRecyclerViewAdapter(Context context, List<Work> itemList, BaseFragment.OnFragmentInteractionListener listener) {
- this.context = context;
- workList=itemList;
- mListener = listener;
- }
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View view = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.fragment_item, parent, false);
- return new ViewHolder(view);
- }
- @Override
- public void onBindViewHolder(final ViewHolder holder, final int position) {
- holder.work = workList.get(position);
- holder.dynamicImageView.setImageUrl((holder.work.getImage()),
- ImageLoaderHelper.getInstance(context).getImageLoader());
- holder.dynamicImageView.setAspectRatio(AspectRatio);
- holder.mIdView.setText(holder.work.getTitle());
- holder.mView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (null != mListener) {
- // Notify the active callbacks interface (the activity, if the
- // fragment is attached to one) that an item has been selected.
- mListener.onFragmentInteraction(holder.work);
- }
- }
- });
- }
- @Override
- public int getItemCount() {
- return workList.size();
- }
- public void addList(List<Work> workList) {
- this.workList = workList;
- notifyDataSetChanged();
- }
- public class ViewHolder extends RecyclerView.ViewHolder {
- public final View mView;
- public final TextView mIdView;
- private final DynamicHeightNetworkImageView dynamicImageView;
- private Work work;
- public ViewHolder(View view) {
- super(view);
- mView = view;
- dynamicImageView = (DynamicHeightNetworkImageView) view.findViewById(R.id.thumbnail);
- mIdView = (TextView) view.findViewById(R.id.Title);
- }
- }
- }
- @Root (name = "results", strict = false)
- public class Results {
- @ElementList(required = false)
- public List<Work> works;
- public Results(List<Work> works) {
- this.works = works;
- }
- public List<Work> getWorks() {
- return works;
- }
- public void setWorks(List<Work> works) {
- this.works = works;
- }
- public Results() {
- }
- }
- @Root(name = "work", strict = false)
- public class Work {
- @Path("best_book")
- @Element(name = "id")
- private String id;
- @Path("best_book")
- @Element (name = "title")
- private String title;
- @Path("best_book/author")
- @Element(name = "name")
- private String author;
- @Path("best_book")
- @Element (name = "image_url")
- private String image;
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getTitle() {
- return title;
- }
- public void setTitle(String title) {
- this.title = title;
- }
- public String getAuthor() {
- return author;
- }
- public void setAuthor(String author) {
- this.author = author;
- }
- public String getImage() {
- return image;
- }
- public void setImage(String image) {
- this.image = image;
- }
- public Work(String id, String title, String author, String image) {
- this.id = id;
- this.title = title;
- this.author = author;
- this.image = image;
- }
- }
- public class RetrofitManager implements GoodReadsService{
- public static final String API_BASE_URL = "https://www.goodreads.com/";
- private GoodReadsAPI goodReadsAPI;
- public void RetrofitOutput(){
- Retrofit retrofit = new Retrofit.Builder()
- .baseUrl(API_BASE_URL)
- .client(new OkHttpClient())
- .addConverterFactory(SimpleXmlConverterFactory.create())
- .build();
- if (retrofit!=null){
- Log.i("Data Fetch","Yes");
- }
- goodReadsAPI=retrofit.create(GoodReadsAPI.class);
- if (goodReadsAPI!=null){
- Log.i("Data","Yes");
- }else {
- Log.e("Error","No");
- }
- }
- @Override
- public GoodReadsAPI getXMLData() {
- if (goodReadsAPI==null){
- RetrofitOutput();
- }
- return goodReadsAPI;
- }
- }
- public interface GoodReadsAPI {
- @GET(Constants.path+Constants.apiKey+Constants.BUSINESS)
- Call<Results> getBooks();
- }
- public interface GoodReadsService {
- GoodReadsAPI getXMLData();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement