【问题标题】:ListView JSON Array doesn't workListView JSON 数组不起作用
【发布时间】:2018-12-04 23:40:17
【问题描述】:

数组“ary”接收来自服务器和Adapter的数据,但不在ListView中显示数据。 onCreate()方法后接收数据有问题吗?

有人有想法/解决方案吗?

public class ScheduleActivity extends AppCompatActivity {


public ListView list;
public ScheduleViewAdapter mSVAdapter;
public JSONArray ary;

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

    list = (ListView) findViewById(R.id.lstSchedule);
    ary = new JSONArray();
    mSVAdapter = new ScheduleViewAdapter(this, ary);
    list.setAdapter(mSVAdapter);
    buildList();
}


public void setListView(JSONArray ary) {
    this.ary = ary;
    mSVAdapter.notifyDataSetChanged();
}

private  void buildList() {

    final RequestQueue requestQueue = Volley.newRequestQueue(this);
    // String URL1 = "http://10.0.2.2:3000/users/:userId/offers/";


    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    // vorläufiger hardcode
    String userID = "5b2f9f3cd56ff67974d2f58e";
   /* userID = settings.getString("userID", "");*/


    String URL1 = "http://10.0.2.2:3000/orders/?buyerID=".concat(userID).concat("/userorder");
    StringRequest stringRequest = new StringRequest(Request.Method.GET, URL1, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.i("ConsoleText", response);
            try {

                JSONArray ary2 = new JSONArray(response);
                setListView(ary2);

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("ConsoleText", error.toString());
        }
    }) {
        @Override
        public String getBodyContentType() {
            return "application/json; charset=utf-8";
        }
    };

    requestQueue.add(stringRequest);
}
}

好的,这是一个编辑。 那是适配器。也许你可以在这里找到错误。谢谢:

 public class ScheduleViewAdapter extends BaseAdapter{

    private Context mContext;
    private JSONArray orders;

    public ScheduleViewAdapter() {
    }

    public ScheduleViewAdapter(Context mContext, JSONArray orders) {
        this.mContext = mContext;
        this.orders = orders;
    }

    @Override
    public int getCount() {
        if(orders == null){
            return 0;
        }else{
            return orders.length();
        }
    }

    @Override
    public JSONObject getItem(int position) {
        if(orders == null){
            return null;
        }else{
            return orders.optJSONObject(position);
        }

    }

    @Override
    public long getItemId(int position) {
        JSONObject object = getItem(position);
        return object.optLong("id");
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null) {
            //Only creates new view when recycling isn't possible
            LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.activity_schedule, parent, false);
        }
        TextView tvItem =(TextView)convertView.findViewById(R.id.tvItem);
     //   TextView tvUserName =(TextView)convertView.findViewById(R.id.tvUserName);
      //  TextView tvAddress =(TextView)convertView.findViewById(R.id.tvAddress);


        JSONObject json_data = getItem(position);



        if(json_data != null){
            try {
                String type = json_data.getString("title");
             //   tvItem.append("" + json_data.getString("title"));


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

        }
        return convertView;
    }
}

【问题讨论】:

    标签: android arrays listview


    【解决方案1】:

    把你的方法改成这个,

    public void setListView(JSONArray ary) {
    this.ary = ary;
    mSVAdapter = new ScheduleViewAdapter(this, ary);
    list.setAdapter(mSVAdapter);
    }
    

    和 onCreate 到这个,

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_schedule);
    list = (ListView) findViewById(R.id.lstSchedule);
    ary = new JSONArray();
    buildList();
    }
    

    【讨论】:

    • 当我在 onCreate 中调试 ary 和 list 时为空。也 list 和 MSVAdapter 在 onResponse 中不再可用。有什么想法吗?
    • 您是否在此日志中收到响应 Log.i("ConsoleText", response);
    • 是的,我愿意。我从服务器收到一个 JSON。
    • 我在帖子中编辑了适配器。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2017-07-07
    相关资源
    最近更新 更多