2016-03-05 71 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」);然後將其添加到數組列表。 –