从JSON数组制作listview

时间:2018-04-18 04:16:38

标签: android json android-volley

我想从数据库中的JSON数组创建列表视图,但是我无法实现将数组放入列表的方法,我对本教程中的方法有所了解:https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView 和这个视频:https://www.youtube.com/watch?v=u8iyFEZaHLU

这是我的主要代码:

public class ViewDosen extends AppCompatActivity {

    TextView tvWelcome;
    ListView listView;
    List<Publikasi> lstPublikasi;
    JSONArray jsonArray;

    String namaDosen,kodeDosen;
    PublikasiAdapter publikasiAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_dosen);


        SharedPreferences DataDosen = getSharedPreferences("Dosen", Context.MODE_PRIVATE);
        kodeDosen = DataDosen.getString("kodeDosen","");
        namaDosen = DataDosen.getString("namaDosen","");

        tvWelcome = (TextView) findViewById(R.id.tvWelcome);
        tvWelcome.setText("Welcome "+namaDosen+"("+kodeDosen+")");

        listView = (ListView) findViewById(R.id.lstPublikasi);

        lstPublikasi = new ArrayList<Publikasi>();

        publikasiAdapter = new PublikasiAdapter(lstPublikasi,getApplicationContext());

        listView.setAdapter(publikasiAdapter);

    }
    String uri = String.format(Utils.viewURL,kodeDosen);

    private void showList(){

        final JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, uri, null, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
             //this is where i will put the JSON Array
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
    }

这是我的模特:

public class Publikasi {
    public String namaJurnal,tipePublikasi,status,periode;

    public Publikasi(JSONObject object) {
        try{
            this.namaJurnal =object.getString("namaJurnal");
            this.tipePublikasi = object.getString("tipePublikasi");;
            this.status = object.getString("status");;
            this.periode = object.getString("periode");;

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

        public static ArrayList<Publikasi> fromJSON(JSONArray jsonObjects){
            ArrayList<Publikasi> publikasi = new ArrayList<Publikasi>();
            for(int i = 0;i<jsonObjects.length();i++){
                try{

                }catch (){

                }
            }
            return publikasi;
        }


    }
}

这是我的适配器:

public class PublikasiAdapter extends ArrayAdapter<Publikasi>{

private List<Publikasi> lstPublikasi;
private Context mCtx;

public PublikasiAdapter(List<Publikasi> P,Context c){
    super(c, R.layout.list_publikasi,P);
    this.lstPublikasi = P;
    this.mCtx = c;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = LayoutInflater.from(mCtx);
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_publikasi, parent, false);
    }

    TextView textNama = (TextView) convertView.findViewById(R.id.textNama);
    TextView textDetail = (TextView) convertView.findViewById(R.id.textDetail);
    TextView textStatus = (TextView) convertView.findViewById(R.id.textStatus);
    TextView textPeriode = (TextView) convertView.findViewById(R.id.textPeriode);

    Publikasi publikasi = lstPublikasi.get(position);
    textNama.setText(publikasi.namaJurnal);
    textDetail.setText(publikasi.tipePublikasi);
    textStatus.setText(publikasi.status);
    textPeriode.setText(publikasi.periode);

    return convertView;
}
}

这是JSON格式:

  

[{&#34; idPublikasi&#34;:&#34; 62&#34;&#34; kodeDosen&#34;:&#34; D0001&#34;&#34;图片&#34 ;: &#34; uploaddosen / D0001_0.50622400   1523420013.jpg&#34;&#34; namaJurnal&#34;:&#34;比萨&#34;&#34; tipePublikasi&#34;:&#34; SCOPUS&#34;&#34;状态&#34 ;:&#34;提交&#34;&#34; periode&#34;:&#34; Genap   2018&#34;},{&#34; idPublikasi&#34;:&#34; 64&#34;&#34; kodeDosen&#34;:&#34; D0001&#34;&#34;图片&#34 ;:&#34; uploaddosen / D0001_0.94649000   1523432053.jpg&#34;,&#34; namaJurnal&#34;:&#34; SPAS 12&#34;,&#34; tipePublikasi&#34;:&#34; Scopus&#34;,&#34; status&# 34;:&#34; On Review&#34;,&#34; periode&#34;:&#34; Sebelum   2015&#34;}]

2 个答案:

答案 0 :(得分:0)

尝试使用showList()

的代码
       private void showList(){

            final JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, uri, null, new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    ArrayList<Publikasi> publikasis=new ArrayList<>();
                    for(int i=0;i<response.length();i++){
                       try {
                    publikasis.add(new  Publikasi(response.getJSONObject(i)));

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

                    publikasiAdapter = new PublikasiAdapter(publikasis,getApplicationContext());

                    listView.setAdapter(publikasiAdapter);
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            });
           RequestQueue queue = Volley.newRequestQueue(this);
           queue.add(jsonArrayRequest);
    }

答案 1 :(得分:0)

您正在创建一个空列表,并将其提供给适配器。因此,没有要显示的列表。

listView = (ListView) findViewById(R.id.lstPublikasi);

lstPublikasi = new ArrayList<Publikasi>();

publikasiAdapter = new PublikasiAdapter(lstPublikasi,getApplicationContext());

响应成功后,您必须填写列表。之后,您必须将列表提供给适配器的方法,例如“updateList();”

以下是样本:

    private void showList() {
        final JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, uri, null, new Response.Listener < JSONArray > () {@
            Override
            public void onResponse(JSONArray response) {
                for (int i = 0; i < jsonArray.length(); i++) {
                    try {
                        lstPublikasi.add(new Publikasi(jsonArray.getJSONObject(i)));
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
                publikasiAdapter.updateList(lstPublikasi);
            }
        }, new Response.ErrorListener() {@
            Override
            public void onErrorResponse(VolleyError error) {}
        });
    }
    public class PublikasiAdapter extends ArrayAdapter < Publikasi > {
        private List < Publikasi > lstPublikasi;
        private Context mCtx;
        public PublikasiAdapter(List < Publikasi > P, Context c) {
            super(c, R.layout.list_publikasi, P);
            this.lstPublikasi = P;
            this.mCtx = c;
        }@
        Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = LayoutInflater.from(mCtx);
            if (convertView == null) {
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_publikasi, parent, false);
            }
            TextView textNama = (TextView) convertView.findViewById(R.id.textNama);
            TextView textDetail = (TextView) convertView.findViewById(R.id.textDetail);
            TextView textStatus = (TextView) convertView.findViewById(R.id.textStatus);
            TextView textPeriode = (TextView) convertView.findViewById(R.id.textPeriode);
            Publikasi publikasi = lstPublikasi.get(position);
            textNama.setText(publikasi.namaJurnal);
            textDetail.setText(publikasi.tipePublikasi);
            textStatus.setText(publikasi.status);
            textPeriode.setText(publikasi.periode);
            return convertView;
        }
        public void updateList(List < Publikasi > mlstPublikasi) {
            lstPublikasi = mlstPublikasi;
            notifyDataSetChanged();
        }
    }