0

Ich möchte Artikel nach seinem Namen in einer Recyclerview sortieren. Es tritt jedoch eine Nullpunktausnahme auf.Sortieren einer ArrayList funktioniert nicht in einer Recyclerview

Dies ist meine Sortierklasse.

public class ItemSorter { 
    public void sortItemByName(ArrayList<SuggestGetSet> dealer) { 
     Collections.sort(dealer, new Comparator<SuggestGetSet>() { 
      @Override 
      public int compare(SuggestGetSet suggestGetSet, SuggestGetSet t1) { 
       return suggestGetSet.getName().compareTo(t1.getName()); 
      } 
     }); 
    } 
} 

Das ist meine SuggestGetSet Klasse

public class SuggestGetSet { 

    String dealer_id, rep_id, dealer_name; 

    public SuggestGetSet() { 

    } 

    public SuggestGetSet(String dealer_id, String id, String name) { 
     this.dealer_id=dealer_id; 
     this.rep_id=id; 
     this.dealer_name=name; 
    } 

    public String getId() { 
     return rep_id; 
    } 

    public void setId(String id) { 
     this.rep_id = id; 
    } 

    public String getDealerId() { 
     return dealer_id; 
    } 

    public void setDealerId(String dealer_id) { 
     this.dealer_id = dealer_id; 
    } 

    public String getName() { 
     return dealer_name; 
    } 

    public void setName(String name) { 
     this.dealer_name = name; 
    } 
} 

Das ist mein Fragment Klasse, die ich bin meine Sortiermethode verwenden.

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_your_dealer_list, container, false); 
     recyclerView = (RecyclerView) view.findViewById(R.id.dealerListRecyclerView); 

     repNo = UserLogIn.getRepNo(); 

     getJsonRequest(); 

Dies ist die Taste, die ich namentlich

  sortButton = (Button) view.findViewById(R.id.sortByName); 
     sortButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       itemSorter.sortItemByName(dealerList); 
       dlAdapter.notifyDataSetChanged(); 
       Toast.makeText(getActivity(),dealerList.toString(),Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     return view; 
    } 

    private void getJsonRequest() { 

     final SQLiteHandler sqLiteHandler = new SQLiteHandler(getActivity().getApplicationContext()); 
     Cursor cr = sqLiteHandler.getData(sqLiteHandler); 
     cr.moveToFirst(); 

     do { 
      repNo = cr.getString(0); 
     } while (cr.moveToNext()); 
     cr.close(); 

     CustomJsonObjectRequest request = new CustomJsonObjectRequest(Request.Method.POST, AppConfig.URL_JSON_DEALER_LIST, hashMap, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       try { 
        JSONObject jsonObject = new JSONObject(String.valueOf(response)); 
        if (jsonObject.names().get(0).equals("feed")) { 
         dealerList = parseJsonResponse(response); 
         dlAdapter.setDealertList(dealerList); 

        } else { 
         Toast.makeText(getActivity(), "No Dealers Available", Toast.LENGTH_SHORT).show(); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
       /*dealerList = parseJsonResponse(response); 
       dlAdapter.setDealertList(dealerList);*/ 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 

      } 
     }) { 
      protected Map<String, String> getParams() throws AuthFailureError { 
       hashMap = new HashMap<String, String>(); 
       hashMap.put("repNo", repNo); 
       return hashMap; 
      } 
     }; 
     requestQueue.add(request); 
    } 

    private ArrayList<SuggestGetSet> parseJsonResponse(JSONObject response) { 
     ArrayList<SuggestGetSet> groupList = new ArrayList<>(); 
     if (response != null || response.length() > 0) { 

      try { 

       JSONArray arrayDelaers = response.getJSONArray(KEY_FEED_NAME); 

       for (int i = 0; i < arrayDelaers.length(); i++) { 
        JSONObject currentObject = arrayDelaers.getJSONObject(i); 
        String rep = currentObject.getString(KEY_REP_ID); 
        String name = currentObject.getString(KEY_REP_NAME); 
        String dealerId = currentObject.getString(KEY_DEALER_ID); 

        SuggestGetSet delaers = new SuggestGetSet(); 
        delaers.setId(rep); 
        delaers.setName(name); 
        delaers.setDealerId(dealerId); 

        groupList.add(delaers); 

       } 
       //Toast.makeText(getApplicationContext(), productList.toString(), Toast.LENGTH_LONG).show(); 

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

     return groupList; 
    } 

    public static interface ClickListener { 
     public void onClick(View view, int position); 

     //public void onLongClick(View view, int position); 

    } 

Mein LogCat

04-03 18:18:05.039 6347-6347/com.ceatkelanisrilanka.dushanmadushanka.ceat D/AndroidRuntime: Shutting down VM 
04-03 18:18:05.039 6347-6347/com.ceatkelanisrilanka.dushanmadushanka.ceat E/AndroidRuntime: FATAL EXCEPTION: main 
                          Process: com.ceatkelanisrilanka.dushanmadushanka.ceat, PID: 6347 
                          java.lang.NullPointerException: Attempt to invoke virtual method 'void com.ceatkelanisrilanka.dushanmadushanka.ceat.ItemSorter.sortItemByName(java.util.ArrayList)' on a null object reference 
                           at com.ceatkelanisrilanka.dushanmadushanka.ceat.fragments.YourDealerListFragment$1.onClick(YourDealerListFragment.java:145) 
                           at android.view.View.performClick(View.java:4780) 
                           at android.view.View$PerformClick.run(View.java:19866) 
                           at android.os.Handler.handleCallback(Handler.java:739) 
                           at android.os.Handler.dispatchMessage(Handler.java:95) 
                           at android.os.Looper.loop(Looper.java:135) 
                           at android.app.ActivityThread.main(ActivityThread.java:5254) 
                           at java.lang.reflect.Method.invoke(Native Method) 
                           at java.lang.reflect.Method.invoke(Method.java:372) 
                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
+0

posten Sie Ihren 'logcat' Fehler? – Kathi

+0

Zeigen Sie den Stack-Trace an, den Text, der besagt, dass es sich um eine Nullzeiger-Ausnahme handelt. – ElDuderino

+0

Wo haben Sie Ihren 'itemSorter' instanziiert? –

Antwort

0

Hier ist, was Sie tun können, sortieren bin verwenden. Scheint, wie Ihr ItemSorter ist nur ein Utility-Klasse, so dass nur ein static Dekorateur Ihre Sortiermethode wie folgt hinzu: public static void sortItemByName(ArrayList<SuggestGetSet> dealer)

Dann, wenn Sie es verwenden möchten, nur die Methode direkt auf die Klasse aufrufen: ItemSorter.sortItemByName(dealerList). Dies beseitigt die Notwendigkeit, die Klasse zu instanziieren und somit NullPointerException zu vermeiden.

Wenn Sie jedoch Ihre Methode nicht statisch machen möchten, müssen Sie sicherstellen, dass Ihre itemSorter irgendwo vor dem Aufruf der Methode initialisiert wurde.

Verwandte Themen