2016-04-09 29 views
-2

Veri formu sql veritabanını getiriliyor ve ben MyCustomAdapter sınıfa verileri geçirerek zaman ArrayList (bir sınıftır hangisi) Öğrenci yazmak için String değişmesi gerekiyor, Şimdi JSONListView.

try { 
     JSONObject jsonObj = new JSONObject(myJSON); 
     peoples = jsonObj.getJSONArray("result"); 

     ArrayList<String> personList=null; 
     for (int i = 0; i < peoples.length(); i++) { 

      JSONObject c = peoples.getJSONObject(i); 
      String roll = c.getString(TAG_ROLL); 

      personList = new ArrayList<String>(); 
      personList.add(i, roll); 
    } 
     dataAdapter = new MyCustomAdapter(this, R.layout.list_item, persons); 
     ListView listView = (ListView) findViewById(R.id.listView); 
     listView.setAdapter(dataAdapter); 

kullanarak almak am

MyCustomAdapter.java

public class MyCustomAdapter extends ArrayAdapter { 
public ArrayList<Student> personList; 
public MyCustomAdapter(Context context, int resource, ArrayList<Student> personList) { 
    super(context, resource, personList); 
    this.personList=new ArrayList<Student>(); 
    this.personList.addAll(personList); 
} 

private class ViewHolder{ 
    TextView roll; 
    TextView name; 
    CheckBox check; 
} 


public View getView(int position, View convertView, ViewGroup parent){ 
    ViewHolder holder=null; 
    Log.v("ConvertView", String.valueOf(position)); 

    if(convertView==null){ 
     LayoutInflater vi = (LayoutInflater)getSystemService(
       Context.LAYOUT_INFLATER_SERVICE); 
     convertView = vi.inflate(R.layout.list_item, null); 

     holder=new ViewHolder(); 
     holder.roll=(TextView)convertView.findViewById(R.id.roll); 
     holder.name=(TextView)convertView.findViewById(R.id.name); 
     holder.check=(CheckBox)convertView.findViewById(R.id.checkBox); 
     convertView.setTag(holder); 

     holder.name.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       CheckBox cb=(CheckBox) v; 
       Student student=(Student)cb.getTag(); 
       Toast.makeText(getContext(), "Clicked on Checkbox: " + cb.getText() + 
         " is " + cb.isChecked(), Toast.LENGTH_SHORT).show(); 
       student.setSelected(cb.isChecked()); 

      } 
     }); 
    } 
    else{ 
     holder=(ViewHolder)convertView.getTag(); 
    } 

    Student student=personList.get(position); 
    holder.roll.setText(" (" + student.getRollno() + ")"); 
    holder.name.setText(student.getName()); 
    holder.check.setChecked(student.isSelected()); 
    holder.check.setTag(student); 

    return convertView; 

} 
} 

Student.java

public class Student { 
String rollno; 
String name; 
Boolean selected; 

public Student(String rollno, String name, Boolean selected){ 
    super(); 
    this.rollno=rollno; 
    this.name=name; 
    this.selected=selected; 
} 
public String getRollno(){ 
    return rollno; 
} 
public void setRollno(String rollno){ 
    this.rollno=rollno; 
} 

public String getName(){ 
    return name; 
} 
public void setName(String name){ 
    this.name=name; 
} 
public Boolean isSelected(){ 
    return selected; 
} 
public void setSelected(boolean selected) { 
    this.selected = selected; 
} 
} 

Verileri özel adaptörüme nasıl aktarmalıyım?

cevap

0

Bağdaştırıcı sınıfınıza göre bir ArrayList listeniz olmalıdır. ancak json bir dize türü listesi hazırlanıyor ..

.. Eğer

JSONObject jsonObj = new JSONObject(myJSON); 
    peoples = jsonObj.getJSONArray("result"); 

    ArrayList<Student> personList=new ArrayList<Student>();; 
    for (int i = 0; i < peoples.length(); i++) { 

     Student student = new Student();    
     JSONObject c = new JSONObject(peoples.getString(i)); 
     student.setName(c.getString("NAME"); 
     student.setRollNo(c.getString(TAG_ROLL)); 

     personList.add(student); 
    } 

Eğer json desen dayalı bu mantığı özelleştirmek gerekir olabilir bu yol gibi bunu yapabilir .. şu sorunu

ve şimdi bunu yapmak için çok daha iyi bir yol yoktur adaptörünüzle

ListView listView = (ListView) findViewById(R.id.listView); 
dataAdapter = new MyCustomAdapter(this, R.layout.list_item, personList); 
listView.setAdapter(dataAdapter); 
+1

Çok teşekkür ederim! Çok uzun bir süre boyunca sıkışmıştı.+1 – GMehta

+0

hoşgeldiniz ... –

0

Ben

ArrayList<Student> personList= new ArrayList(); 

.... u üye olarak Öğrenci ile bir arrayList oluşturmak önermek ve u ı önermek döngü için içeride aşağıdaki ifadeyi neden u döngü veya başka ull önce bunu anlamıyorum ur dizi listesinde yalnızca bir değeri sonlandırın

personList = new ArrayList<String>(); 
      personList.add(i, roll); 
0

bu öğrenci listeyi kullanın. GSON, bir json ayrıştırma kütüphanesidir. Java Nesneleri JSON'a dönüştürebilen ve geri dönüştürebilen bir Java serileştirme/serileştirme kitaplığı.

compile 'com.google.code.gson:gson:2.6.2' 

veya öğrenci modeli sınıfında senin build.gradle yapı dosyası

için bağımlılık olarak daha sonraki bir sürümünü ekleyebilir kurmak bir Gradle içinde GSON kullanmak için @SerializedName ("key_name'ı" kullanın) her alan için bir açıklama olarak o zaman sen

key_name json nesnesinde bir anahtar oluşturmak için bir kurucu oluşturmaya gerek yoktur. Oluşturduğum gibi,

public class Student { 
@SerializedName("roll_no") 
String rollno; 
@SerializedName("name") 
String name; 
@SerializedName("selected") 
Boolean selected; 

public String getRollno(){ 
    return rollno; 
} 
public void setRollno(String rollno){ 
    this.rollno=rollno; 
} 

public String getName(){ 
    return name; 
} 
public void setName(String name){ 
    this.name=name; 
} 
public Boolean isSelected(){ 
    return selected; 
} 
public void setSelected(boolean selected) { 
    this.selected = selected; 
} 
} 

Ayrıca bir tane daha model, sınıf oluşturmak Eğer bu sınıfa bir alan olarak Öğrenci sınıfının bir liste tanımlamak hangi (Result.java demek).

public class Result{ 

@SerializedName("result") 
List<Student> student_list; 

public List<Student> getStudent_list() { 
    return student_list; 
} 

public void setStudent_list(List<Student> student_list) { 
    this.student_list = student_list; 
} 
} 

Şimdi sql veritabanından sonucu getir ve sonuç jsonunu Result sınıf nesnesine dönüştür.

try { 
    JSONObject jsonObj = new JSONObject(myJSON); 
    Result result_object = new GsonBuilder().create().fromJson(jsonObj.toString(), Result.class); 
    dataAdapter = new MyCustomAdapter(this, R.layout.list_item, result_object.getStudent_list()); 
    ListView listView = (ListView) findViewById(R.id.listView); 
    listView.setAdapter(dataAdapter);