2016-11-27 2 views
1

Ich habe einfach eine benutzerdefinierte Liste in einem Fragment.Ich habe diese Daten von api mit Volley abgerufen.Es zeigt folgenden Fehler.Ich bekomme eine Idee, dies zu lösen, kann jemand bitte bitte mir helfen.Benutzerdefinierte Liste innerhalb Fragment funktioniert nicht

java.lang.NullPointerException: Attempt to invoke virtual method 'com.android.volley.toolbox.ImageLoader com.example.user.ekta.AppController.getImageLoader()' on a null object reference 
                      at com.example.user.ekta.MyBookAdapter.<init>(MyBookAdapter.java:25) 
                      at com.example.user.ekta.FullInfoTabFragment.onCreateView(FullInfoTabFragment.java:85). 

Das ist mein Fragment Klasse

package com.example.user.ekta; 

import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.content.res.TypedArray; 
import android.graphics.Canvas; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.widget.DefaultItemAnimator; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.Toast; 

import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.VolleyLog; 
import com.android.volley.toolbox.JsonArrayRequest; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.List; 


public class FullInfoTabFragment extends Fragment { 

    private static final String EXTRA_SRORT_CARD_MODEL = "EXTRA_SRORT_CARD_MODEL"; 
    // String transitionTag; 
    private SportCardModel sportCardModel; 
    private Toolbar toolbar; 
    private ImageView ivPhoto; 

    private static final String TAG = FullInfoTabFragment.class.getSimpleName(); 

    private static final String url = "http://myeducationhunt.com/public/schools"; 

    private ProgressDialog pDialog; 
    private List<MyBook> ourBooksListItems = new ArrayList<MyBook>(); 
    private ListView listView; 
    private MyBookAdapter adapter; 


    public static FullInfoTabFragment newInstance(SportCardModel sportCardModel) { 
     FullInfoTabFragment fragment = new FullInfoTabFragment(); 
     Bundle args = new Bundle(); 
     args.putParcelable(EXTRA_SRORT_CARD_MODEL, sportCardModel); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (getArguments() != null) { 
      sportCardModel = getArguments().getParcelable(EXTRA_SRORT_CARD_MODEL); 
     } 
     if (savedInstanceState != null) { 
      sportCardModel = savedInstanceState.getParcelable(EXTRA_SRORT_CARD_MODEL); 
     } 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_full_info, container, false); 
     toolbar = (Toolbar) view.findViewById(R.id.toolbar); 
     ivPhoto = (ImageView) view.findViewById(R.id.ivPhoto); 

     listView = (ListView) view.findViewById(R.id.list); 
     adapter = new MyBookAdapter(getActivity(), ourBooksListItems); 
     listView.setAdapter(adapter); 
     listView.setTextFilterEnabled(true); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

//    OurSchool ourSchool = new OurSchool(); 
//    Intent i = new Intent(getContext(), SchoolDetails.class); 

//    i.putExtra("id", ourSchoolsListItems.get(position).schoolId); 
//    i.putExtra("name", ourSchoolsListItems.get(position).schoolName); 
//    i.putExtra("location", ourSchoolsListItems.get(position).schoolLocation); 
//    i.putExtra("logo", ourSchoolsListItems.get(position).schoolLogo); 
//    i.putExtra("email", ourSchoolsListItems.get(position).schoolEmail); 
//    i.putExtra("website", ourSchoolsListItems.get(position).schoolWebsite); 
//    i.putExtra("created_at", ourSchoolsListItems.get(position).createdAt); 
//    i.putExtra("updated_at", ourSchoolsListItems.get(position).updatedAt); 

//    startActivity(i); 

      } 
     }); 
     pDialog = new ProgressDialog(getActivity()); 
// Showing progress dialog before making http request 
     pDialog.setMessage("Loading…"); 
     pDialog.show(); 

// Creating volley request obj 
     JsonArrayRequest schoolRequest = new JsonArrayRequest(url, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); 
         pDialog.hide(); 

         // Parsing json 
         for (int i = 0; i < response.length(); i++) { 
          try { 

           JSONObject obj = response.getJSONObject(i); 
           MyBook myBook = new MyBook(); 

           myBook.bookName = obj.getString("name"); 
           myBook.bookAuthor = obj.getString("location"); 
           myBook.bookCover= obj.getString("logo"); 
           // adding schools to ourSchool list 
           ourBooksListItems.add(myBook); 

          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 

         adapter.notifyDataSetChanged(); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       pDialog.hide(); 
      } 
     }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(schoolRequest); 
     return view; 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     toolbar.setTitle(sportCardModel.getSportTitle()); 
     toolbar.setNavigationIcon(R.drawable.ic_back); 
     toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       getActivity().onBackPressed(); 
      } 
     }); 
     toolbar.setBackgroundColor(ContextCompat.getColor(getContext(), sportCardModel.getBackgroundColorResId())); 
     ivPhoto.setImageResource(sportCardModel.getImageResId()); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     outState.putParcelable(EXTRA_SRORT_CARD_MODEL, sportCardModel); 
     super.onSaveInstanceState(outState); 
    } 

    static class DividerItemDecoration extends RecyclerView.ItemDecoration { 

     private static final int[] ATTRS = new int[]{android.R.attr.listDivider}; 

     private Drawable mDivider; 

     /** 
     * Default divider will be used 
     */ 
     public DividerItemDecoration(Context context) { 
      final TypedArray styledAttributes = context.obtainStyledAttributes(ATTRS); 
      mDivider = styledAttributes.getDrawable(0); 
      styledAttributes.recycle(); 
     } 

     /** 
     * Custom divider will be used 
     */ 
     public DividerItemDecoration(Context context, int resId) { 
      mDivider = ContextCompat.getDrawable(context, resId); 
     } 

     @Override 
     public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { 
      int left = parent.getPaddingLeft(); 
      int right = parent.getWidth() - parent.getPaddingRight(); 

      int childCount = parent.getChildCount(); 
      for (int i = 0; i < childCount; i++) { 
       View child = parent.getChildAt(i); 

       RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); 

       int top = child.getBottom() + params.bottomMargin; 
       int bottom = top + mDivider.getIntrinsicHeight(); 

       mDivider.setBounds(left, top, right, bottom); 
       mDivider.draw(c); 
      } 
     } 
    } 
} 

Und das ist meine Adapterklasse

package com.example.user.ekta; 

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 


import com.android.volley.toolbox.ImageLoader; 
import com.android.volley.toolbox.NetworkImageView; 

import java.util.List; 

/** 
* Created by user on 11/27/2016. 
*/ 
public class MyBookAdapter extends BaseAdapter { 

    private Activity activity; 
    private LayoutInflater inflater; 
    private List<MyBook> ourbooksList; 
    ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 

    public MyBookAdapter(Activity activity, List<MyBook> ourbooksListsList) { 
     this.activity = activity; 
     this.ourbooksList = ourbooksListsList; 
    } 


    @Override 
    public int getCount() { 
     return ourbooksList.size(); 
    } 

    @Override 
    public Object getItem(int location) { 
     return ourbooksList.get(location); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if (inflater == null) 
      inflater = (LayoutInflater) activity 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) 
      convertView = inflater.inflate(R.layout.list_books, null); 

     if (imageLoader == null) 
      imageLoader = AppController.getInstance().getImageLoader(); 
     NetworkImageView bookCover = (NetworkImageView) convertView 
       .findViewById(R.id.bookCover); 
     TextView bookName = (TextView) convertView.findViewById(R.id.bookName); 
     TextView boookAuthor = (TextView) convertView.findViewById(R.id.bookAuthor); 
     MyBook m = ourbooksList.get(position); 

     bookCover.setImageUrl(m.getBookCover(), imageLoader); 

     bookName.setText("Name: " + m.getBookName()); 

     boookAuthor.setText("Address: " + String.valueOf(m.getBookAuthor())); 


     return convertView; 
    } 
} 
+0

Zeigen Sie Ihren Code von AppController – Rahul

+0

Je nach Fehler verursacht Ihr Singleton Problem. Es ist ein Null und Sie bekommen einen Absturz beim Aufruf von getImageLoader() auf AppController.getInstance() – Rahul

+0

danke rahul.Ich habe meinen Fehler behoben – seon

Antwort

0

AppController.getInstance() null zurückkehrt, haben Sie Ihr AppController nicht initialisiert.

Wenn AppController Ihre Anwendung erstreckt, dann müssen Sie Ihr Manifest

android ändern: = name "Pfad zu AppController" im App.

+0

Oh, ich vergesse.Ich habe einen dummen Fehler gemacht.Vielen Dank für mich daran zu erinnern – seon

Verwandte Themen