2016-05-20 4 views
-1

Ich versuche, Daten von Parse meinem Adapter abzurufen, und ich habe einen Fehler:Android Java java.lang.NullPointerException: parsen Server Recycler Ansicht

05-20 04:17:52.955 4266-4266/rabshet.home.myapplication E/AndroidRuntime: FATAL EXCEPTION: main 
Process: rabshet.home.myapplication, PID: 4266 
java.lang.RuntimeException: Unable to start activity ComponentInfo{rabshet.home.myapplication/rabshet.home.myapplication.RecyclerViewActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.equals(java.lang.Object)' on a null object reference 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.equals(java.lang.Object)' on a null object reference 
at rabshet.home.myapplication.RVAdapter.<init>(RVAdapter.java:43) 
at rabshet.home.myapplication.RecyclerViewActivity.initializeAdapter(RecyclerViewActivity.java:73) 
at rabshet.home.myapplication.RecyclerViewActivity.onCreate(RecyclerViewActivity.java:37) 
at android.app.Activity.performCreate(Activity.java:6237) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
at android.app.ActivityThread.-wrap11(ActivityThread.java)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
at android.os.Handler.dispatchMessage(Handler.java:102)  
at android.os.Looper.loop(Looper.java:148)  
at android.app.ActivityThread.main(ActivityThread.java:5417)  
at java.lang.reflect.Method.invoke(Native Method)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Die Verbindung zum Server funktioniert.

Mein adapter.java

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> { 
public static class PersonViewHolder extends RecyclerView.ViewHolder { 

    CardView cv; 
    TextView personName; 
    TextView personAge; 
    ParseImageView personPhoto; 

    PersonViewHolder(View itemView) { 
     super(itemView); 
     cv = (CardView)itemView.findViewById(R.id.cv); 
     personName = (TextView)itemView.findViewById(R.id.person_name); 
     personAge = (TextView)itemView.findViewById(R.id.person_age); 
     personPhoto = (ParseImageView)itemView.findViewById(R.id.person_photo); 

    } 
} 


List<Person> persons; 

RVAdapter(List<ParseObject> persons){ 
    this.persons .equals(persons); 
} 

@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
    super.onAttachedToRecyclerView(recyclerView); 
} 

@Override 
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false); 
    PersonViewHolder pvh = new PersonViewHolder(v); 
    return pvh; 
} 

@Override 
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) { 
    personViewHolder.personName.setText(persons.get(i).name); 
    personViewHolder.personAge.setText(persons.get(i).describe); 


    //personViewHolder.personPhoto.setParseFile(persons.get(0).photoId); 
//personPhoto should be ImageView or your CustomImageView 
     Glide.with(personViewHolder.personPhoto.getContext()) 
       .load(persons.get(0).photoId) 
       .fitCenter() 
       .into(personViewHolder.personPhoto); 
     //personViewHolder.personPhoto.setParseFile(persons.get(2).photoId); 

} 

@Override 
public int getItemCount() { 
    return persons.size(); 
} 
} 

Meine Haupttätigkeit. Ich denke, der Fehler in der Abfrage der Klassenname ist wahr, ich bin mir sicher.

public class RecyclerViewActivity extends Activity { 
private List<ParseObject> persons; 
private List<ParseFile>image; 
private RecyclerView rv; 
private int[] img; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    rv=(RecyclerView)findViewById(R.id.rv); 

    LinearLayoutManager llm = new LinearLayoutManager(this); 
    rv.setLayoutManager(llm); 
    rv.setHasFixedSize(true); 

    initializeData(); 
    initializeAdapter(); 
} 

private void initializeData(){ 
    persons = new ArrayList<>(); 


    //Query to load String data into the card view/recycler view 
    ParseQuery<ParseObject> query = ParseQuery.getQuery("proudect"); 
    query.findInBackground(new FindCallback<ParseObject>() { 
     @Override 
     public void done(List<ParseObject> objects, ParseException e) { 

      if (e == null) { 

       for (int i = 0; i < objects.size(); i++) { 

        persons.add(objects.get(i).getParseObject("pr_name")); 
        persons.add(objects.get(i).getParseObject("describe")); 
        image.add(objects.get(i).getParseFile("pr_image")); 

        // persons.add(new Person(objects.get(i).getString("pr_name"), objects.get(i).getString("describe"), objects.get(i).getParseFile("pr_image"), img[i])); 

       } 
      } else { 
       // something went wrong 
      } 


      initializeAdapter(); 
     } 
    }); 

} 

private void initializeAdapter(){ 
    RVAdapter adapter = new RVAdapter(persons); 
    rv.setAdapter(adapter); 
} 
} 

Person.java

class Person { 
    String name; 
    String describe; 
    ParseFile photoId; 
Person(String name, String describe, ParseFile image, int i) { 
    this.name =name; 
    this.describe =describe; 
} 


} 

My app Github.

Bitte helfen Sie mir.

Antwort

0

Das Problem ist in

List<Person> persons; 

RVAdapter(List<ParseObject> persons){ 
    this.persons .equals(persons); 
} 

verwenden

List<ParseObject> persons ; // here `List` is of `ParseObject` 

RVAdapter(List<ParseObject> persons){  // here persons `List` is also of `ParseObject` 
    this.persons = persons;    // if both `List` are of same type i.e `ParseObject` then we can set data one to another 
} 
+0

Ich versuche es Liste Personen zu korrigieren; RVAdapter (Liste Personen) { this.persons = Personen; } aber ich habe Fehler inkompatible Typen Required List gefunden List

+0

@islamahmed meine bearbeitete Antwort zu versuchen. Wenn ein Problem auftritt, lass es mich wissen. –

+0

jetzt ich habe Fehler auf onBindViewHolder nicht Symbolnamen und beschreiben und PhotoID von Person.java :( –

0
  1. Der Konstruktor in dem Sie die Variablen zu initialisieren beabsichtigen, wird die Ausnahme verursacht.

    this.persons.equals (Personen); Diese Anweisung weist den Elementvariablen keine Werte zu, sondern prüft einfach auf Gleichheit. In diesem Fall, da this.persons immer noch null ist, weil es noch nicht initialisiert wurde, würden Sie eine NullPointerException auf die Gleichheitsprüfung erhalten.

    Ersetzen Sie es durch den Zuweisungsoperator.

    this.persons = persons; 
    

    Dies würde die Arbeit tun.

  2. Da der Parameter Ihres Konstruktors List<ParseObject> ist, sollte die Elementvariable auch gleich sein. Bitte initialisieren List<Person> persons; als List<ParseObject> persons;

+0

ich versuche, es zu korrigieren Liste Personen lösen; RVAdapter (List Personen) { dieses.Personen = Personen; } aber ich habe Fehler inkompatible Typen Required List gefunden List

+0

@islamahmed aktualisiert Antwort. –