我试图从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);
}
}
&#13;
Places.java
public class Places {
int id,lat,lng;
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
&#13;
那么问题是什么?
答案 0 :(得分:1)
它显示的是因为您已将Places
对象传递到列表视图,并且您还没有提供要在Places
对象的列表视图中显示的字段,您应该提供toString()
对象中的Places
方法用于查看名称列表,或者您应该创建自己的适配器实现
查看名单上的列表视图
在Places
班级
public void toString(){
return name;
}
答案 1 :(得分:0)
在我看来,您还没有覆盖toString()
课程的Places
方法。
将此添加到您的Places
课程:
@Override
public String toString(){
return name;
}
看看是否有帮助。
适配器正在调用toString()
Places
超类的Object
方法,该方法返回Places
对象的哈希值。
这是什么打印。