2016-03-05 108 views
1

我试图从json获取数据。其实它正在工作,但我有一个listview.Im出现问题。数组列表和列表视图

Here is the error image

下面是代码; 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; 
 
    } 
 

 
}

那么是什么问题?

+0

也发布你的json。 –

+0

这是我的json http://www.jsoneditoronline.org/?url=https://api.foursquare.com/v2/venues/search?ll=41,29&oauth_token=01ZV1VDLE41USSRAYJUXOWNJ2MXYCAVN1I2PQFLFBCD40XYI&v=20160304 – Azat

+0

我无法看到任何在你的json中称为name的字符串。 –

回答

1

它显示这样的,因为你已经通过Places对象到你的列表视图,并且您还没有提供哪些字段列表视图来显示从Places对象,你应该提供您的Places对象toString()方法来查看您的与名称列表,或者你应该创建自己的适配器实现

要查看列表视图以名字

Places类中添加这

public void toString(){ 
return name; 
} 
+0

它的工作原理!非常感谢你:) – Azat

+0

@Azat你可以通过点击答案旁边的正确标记来标记这个答案,如果它对你有帮助的话,这样可以帮助其他人面临同样的问题 – Pragnani

+0

它完成了。我还有一个问题。我如何显示所有的地方。这样所有的名字都是一样的 – Azat

0

在我看来,你没有重写你的Places类的toString()方法。

添加到您的Places类:

@Override 
public String toString(){ 

return name; 
} 

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

+0

我还有一个问题。它在每个listview项目中显示相同的名称。那么我需要做什么? – Azat

+0

您只有一个位置对象,它在您的for循环的每次迭代中看起来像您要更改该单个对象的名称,然后将对同一对象的引用添加到列表中。 –

+0

在for循环结束时,试试Places place = new Places(); place.setName(“new name”);然后将其添加到数组列表。 –