2016-04-13 22 views
0

Bu bir yinelenen ise özür dilerim. Ben hala android geliştirme için yeni ve bir çözüm aramaya çalıştım ancak işe yarayan bir tane bulamadım.Android - Bağdaştırıcı NullPointerException

Bir yapılacaklarim uygulaması oluşturup bu hatayı adaptörümde alıyorum.

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String assignment.Model.getAssignment()' on a null object reference 
at assignment.Adapter.getView(Adapter.java:39)  

ve ben olarak kuruyorum konum hatasının neden olduğunu olduğuna inanıyoruz

assignment.setText(modelItems[position].getAssignment()); 

olduğu için başvuran kod satırına ama nasıl emin değilim düzelt. - onActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    String assignmentSentBack = data.getStringExtra("editAssignment"); 
    Integer monthSentBack = data.getIntExtra("month", 0); 
    Integer daySentBack = data.getIntExtra("day", 0); 

    modelItems = new Model[100]; 
    ArrayList<Model> modelArrayList = new ArrayList<>(Arrays.asList(modelItems)); 
    modelArrayList.add(new Model(assignmentSentBack, (monthSentBack + 1) + "/" + daySentBack, 0)); 
    lv = (ListView) findViewById(R.id.listAssignment); 
    ListAdapter adapter = new Adapter(this, modelItems); 
    lv.setAdapter(adapter); 
} 

İkinci Etkinlik - onSendActivity (Düğme)

public void onSendAssignment (View view) { 

    EditText editAssignmentET = (EditText) 
      findViewById(R.id.editAssignment); 

    String editAssignment = String.valueOf(editAssignmentET.getText()); 

    DatePicker datePickerDP = (DatePicker) 
      findViewById (R.id.datePicker); 

    Integer month = Integer.valueOf(datePickerDP.getMonth()); 

    Integer day = Integer.valueOf(datePickerDP.getDayOfMonth()); 

    Intent goingBack = new Intent(); 

    goingBack.putExtra("editAssignment", editAssignment); 
    goingBack.putExtra ("month", month); 
    goingBack.putExtra("day", day); 

    setResult(RESULT_OK, goingBack); 

    finish(); 
} 

Adaptör

public class Adapter extends ArrayAdapter { 

Model[] modelItems = null; 
Context context; 

public Adapter(Context context, Model[] resource) { 
    super(context, R.layout.row, resource); 
    this.context = context; 
    this.modelItems = resource; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.row, parent, false); 
     TextView assignment = (TextView) convertView.findViewById(R.id.assignment); 
     TextView dueDate = (TextView) convertView.findViewById(R.id.dueDate); 
     CheckBox cb = (CheckBox) convertView.findViewById(R.id.checkBox); 
     assignment.setText(modelItems[position].getAssignment()); 
     dueDate.setText(modelItems[position].getDueDate()); 
     if (modelItems[position].getValue() == 1) 
      cb.setChecked(true); 
     else 
      cb.setChecked(false); 

     return convertView; 
    } 
} 

MainActivity.Java:

İşte başvuru için benim kod kalanı bir parçası

model

public class Model { 

String assignment; 
String dueDate; 
int value; 

Model (String assignment, String dueDate, int value){ 
    this.assignment = assignment; 
    this.dueDate = dueDate; 
    this.value = value; 
} 

public String getAssignment(){ 
    return this.assignment; 
} 

public String getDueDate(){ 
    return this.dueDate; 
} 

public int getValue(){ 
    return this.value; 
    } 
}  

bir Yardım takdir edilmektedir. Teşekkür ederim.

+0

onun yüzünden parametreleri bir iç Tutucu sınıfında sarın ve tanımlamak için çalışmalısınız senin 'modelsItems' sadece onlara herhangi bir değer atamadınız ilan edilir. –

cevap

0

değişiklik

public class Adapter extends ArrayAdapter { 

public class Adapter extends ArrayAdapter<Model> { 
0

için Burada büyüklüğü 100 model dizisi oluşturduk:

modelItems = new Model[100]; 

Yani, 100 modelleri oluşturulmakta olan ancak tüm 100 indeksleri null var değer.

Sonra o diziyi kullanarak ArrayList yarattık:

ArrayList<Model> modelArrayList = new ArrayList<>(Arrays.asList(modelItems)); 

Yani tekrar modelArrayList sahiptir 100 null nesneler. Hangi btw nerede kullanıyorsun.

Adapter yapıcıya modelItems geçiş yapıyorsunuz. Artık tüm öğeleriniz null olduğundan, bu istisnayı alıyorsunuz.

deneyin böyle bir şey yapmak için:

ArrayList<Model> modelArrayList = new ArrayList<>(); 
modelArrayList.add(new Model(assignmentSentBack, (monthSentBack + 1) + "/" + daySentBack, 0)); 

Benzer böyle daha modeli nesneleri ekleyin. Bu modelArrayList'u adaptörünüzün yapıcısına iletin ve listeyi görüntülemek için bunu (dizi yerine) kullanın.

lv = (ListView) findViewById(R.id.listAssignment); 
ListAdapter adapter = new Adapter(this, modelArrayList) 

Ve böylece adaptör böyle olacak:

ArrayList<Model> modelArrayList; 
Context context; 

public Adapter(Context context, ArrayList<Model> resource) { 
    super(context, R.layout.row, resource); 
    this.context = context; 
    this.modelArrayList = resource; 
} 
2

o sınıfın

public class Adapter extends ArrayAdapter { 

Model[] modelItems = null; 
Context context; 

public Adapter(Context context, Model[] resource) { 
    super(context, R.layout.row, resource); 
    this.context = context; 
    this.modelItems = resource; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     if (convertView == null) { 
      holder = new ViewHolder(); 

      convertView = vi.inflate(R.layout.list_layout, null); 

      // Find the child views. 
      holder.assignment= (TextView) convertView.findViewById(R.id.txt_name); 
      holder.dueDate= (Button) convertView.findViewById(R.id.btn_invite); 
      holder.cb= (Button) convertView.findViewById(R.id.btn_track); 
      convertView.setTag(holder); 

//.... 

     } 
     // Reuse existing row view 
     else { 
      holder = (ViewHolder)convertView.getTag(); 

     } 

     return convertView; 
    } 
class ViewHolder { 

     TextView assignment; 
TextView dueDate; 
CheckBox cb; 

    } 
} 
İlgili konular