我想从数据库中的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;}]
答案 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();
}
}