【问题标题】:Array list and list view数组列表和列表视图
【发布时间】:2016-06-19 11:02:22
【问题描述】:

我正在尝试从 json 获取数据。实际上它正在工作,但我的 listview 有问题。我收到错误。

这里是代码; MainActivity.java

  

public class MainActivity extends AppCompatActivity {
    TextView txt;
    Places places=new Places();
    ListView listView;
    List<Places> PlacesList=new ArrayList<>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txt= (TextView) findViewById(R.id.text);
        listView= (ListView) findViewById(R.id.listView);
        listView.setBackgroundColor(Color.BLACK);
        new getData().execute("https://api.foursquare.com/v2/venues/search?ll=41,29&oauth_token=01ZV1VDLE41USSRAYJUXOWNJ2MXYCAVN1I2PQFLFBCD40XYI&v=20160304");

    }
    public class getData extends AsyncTask<String,String,List <Places>> {
        HttpURLConnection conn=null;
        URL url=null;
        BufferedReader bReader=null;
        String name=null;
        @Override
        protected List<Places> doInBackground(String... params) {
            try {
                //BURADA URL'E BAGLANDIK
                url=new URL(params[0]);
                conn= (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setDoInput(true);
                conn.connect();
                //VERİ OKUMAK İÇİN STREAM KULLANACAZ
                InputStream istream=conn.getInputStream();
                bReader= new BufferedReader(new InputStreamReader(istream));
                //VERİ DEPOLAMAK İÇİN StringBuffer
                StringBuffer sBuffer=new StringBuffer();
                String line="";
                while((line=bReader.readLine())!=null){
                    sBuffer.append(line);
                }
                String JSONFinal=sBuffer.toString();
                JSONObject jsonObject=new JSONObject(JSONFinal);
                JSONArray jsonArray=jsonObject.getJSONObject("response").getJSONArray("venues");
                StringBuffer finalBuffer=new StringBuffer();
                for(int i=0;i<jsonArray.length();i++) {
                    JSONObject finalJsonObject = jsonArray.getJSONObject(i);
                    name = finalJsonObject.getString("name");
                    places.setName(name);
                    PlacesList.add(places);
                }

                return  PlacesList;
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            finally {
                conn.disconnect();
            }
            return null;
        }

        @Override
        protected void onPostExecute( List<Places> PlacesList) {
            super.onPostExecute(PlacesList);
            ArrayAdapter adapter=  new ArrayAdapter<Places>(getApplicationContext(),android.R.layout.simple_list_item_1,PlacesList);
            listView.setAdapter(adapter);

        }
    }

Places.java

public class Places {
    int id,lat,lng;
    String name;



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

那么问题出在哪里?

【问题讨论】:

标签: java android listview arraylist


【解决方案1】:

之所以会这样显示是因为您已将 Places 对象传递给列表视图,而您尚未从 Places 对象提供要在列表视图中显示的字段,您可能应该在您的Places 对象以查看您的名称列表,或者您应该创建自己的适配器实现

查看带有名称的列表视图

将此添加到您的 Places 课程中

public void toString(){
return name;
}

【讨论】:

  • @Azat 如果对您有帮助,您可以通过单击答案旁边的正确标记将其标记为答案,以便对面临相同问题的其他人有所帮助
  • 完成了。我还有一个问题。我要如何展示所有的地方。这样所有的名字都是一样的
  • @Azat 我看到您将某人的答案标记为正确答案。您可能应该创建您的自定义适配器
【解决方案2】:

在我看来,您还没有覆盖 Places 类的 toString() 方法。

将此添加到您的 Places 课程中:

@Override
public String toString(){

 return name;
}

看看是否有帮助。 适配器正在调用PlacesObject 超类的toString() 方法,该方法返回Places 对象的哈希值。 这就是正在打印的内容。

【讨论】:

  • 我还有一个问题。它在列表视图的每个项目中显示相同的名称。那我需要做什么呢?
  • 您只有一个位置对象,在我看来,您的 for 循环的每次迭代都在更改该单个对象的名称,然后将对同一对象的引用添加到列表中。
  • 在最后的for循环中,尝试 Places place = new Places(); place.setName("新名字");然后将其添加到数组列表中。
  • 另外,你的 Places 类被命名为复数形式,但只处理一个地方。您应该删除名称末尾的 s。
  • 非常感谢它。我的英语有些问题:)
猜你喜欢
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多