2016-02-18 2 views
3

я следую этой video попытаться получить данные из MongoDB Получить JsonArray из MongoDB, а также использовать режим отладки проверить класс JsonTest.java: ArrayList<JsonSongs> songlist; есть 21 данные в нем, и все правильно, и listview имеет 21 строку, но почему-то данные не отображались в текстовом виде,JsonAdapter не может печатать данные

Я думаю, что класс JsonTest.java: 'Songlist песен' ArrayList; did pass the data to class JsonSongAdapter.java ˋArrayList<JsonSongs> songlist; Право? пожалуйста, помогите, застрял здесь в течение нескольких часов

JsonTest.java

public class JsonTest extends Activity { 

ListView list; 
ArrayList<JsonSongs> songlist; 
    private TextView test; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.jsonmain); 
    list = (ListView)findViewById(R.id.JsonlistView); 
    songlist = new ArrayList<JsonSongs>(); 
    new JsonTalk().execute("http://192.168.1.102:3000/songs"); 

     } 





class JsonTalk extends AsyncTask< String , String ,String>{ 

    @Override 
    protected String doInBackground(String... params) { 
     HttpURLConnection connection = null; 
     BufferedReader reader = null; 

     try { 
      URL url = new URL(params[0]); 
      connection = (HttpURLConnection) url.openConnection(); 
      connection.connect(); 

      InputStream stream = connection.getInputStream(); 
      reader = new BufferedReader(new InputStreamReader(stream)); 
      StringBuffer buffer = new StringBuffer(); 
      String line = ""; 
      while ((line = reader.readLine()) != null) { 
       buffer.append(line); 
      } 
      String finalJson = buffer.toString(); 
      // JSONObject parentJsonObject = new JSONObject(finalJson); 
      JSONArray jsonArray = new JSONArray(finalJson); 
      JsonSongs jsonSongs = new JsonSongs(); 
      for (int i = 0 ; i < jsonArray.length();i++){ 
       JSONObject finaObject = jsonArray.getJSONObject(i); 
       jsonSongs.set_id(finaObject.getString("_id")); 
       jsonSongs.setDecade(finaObject.getString("decade")); 
       jsonSongs.setArtist(finaObject.getString("artist")); 
       jsonSongs.setSong(finaObject.getString("song")); 
       jsonSongs.setWeeksAtOne(finaObject.getInt("weeksAtOne")); 
       songlist.add(jsonSongs); 
      } 

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

     finally { 
      if (connection != null) { 
       connection.disconnect(); 
      } 
      try { 
       if (reader != null) { 
        reader.close(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     if(result == null){ 
      JsonSonAdapter adapter = new JsonSonAdapter(getApplicationContext(),R.layout.jsonlayout,songlist); 
      list.setAdapter(adapter); 
     }else { 
      Toast.makeText(JsonTest.this,"NOP",Toast.LENGTH_LONG).show(); 
     } 
    } 
} 
} 

JsonSonAdapter

public class JsonSonAdapter extends ArrayAdapter<JsonSongs> { 
ArrayList<JsonSongs> songList; 
int Resource; 
Context context; 
LayoutInflater vi; 

public JsonSonAdapter(Context context, int resource, ArrayList<JsonSongs> objects) { 
    super(context, resource, objects); 
    songList = objects; 
    Resource = resource; 
    this.context = context; 
    vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 
    if(convertView == null){ 
     convertView = vi.inflate(Resource,null); 
     holder = new ViewHolder(); 
     holder.textJson_ID=(TextView)convertView.findViewById(R.id.textJson_ID); 
     holder.textJSONname=(TextView)convertView.findViewById(R.id.textJSONname); 
     holder.textJsonSong=(TextView)convertView.findViewById(R.id.textJsonSong); 
     holder.textJsonYear=(TextView)convertView.findViewById(R.id.textJsonYear); 
     holder.textJsonWeeks=(TextView)convertView.findViewById(R.id.textJsonWeeks); 
     convertView.setTag(holder); 
    }else { 
     holder = (ViewHolder)convertView.getTag(); 
    } 

    return convertView; 
} 

static class ViewHolder{ 

public TextView textJsonYear; 
public TextView textJSONname; 
public TextView textJsonSong; 
public TextView textJsonWeeks; 
public TextView textJson_ID; 
} 

} 

JsonSongs

public class JsonSongs { 

private String _id; 
private String decade; 
private String artist; 
private String song; 
private int weeksAtOne; 

public String get_id() { 
    return _id; 
} 

public void set_id(String _id) { 
    this._id = _id; 
} 

public String getArtist() { 
    return artist; 
} 

public void setArtist(String artist) { 
    this.artist = artist; 
} 

public String getDecade() { 
    return decade; 
} 

public void setDecade(String decade) { 
    this.decade = decade; 
} 

public String getSong() { 
    return song; 
} 

public void setSong(String song) { 
    this.song = song; 
} 

public int getWeeksAtOne() { 
    return weeksAtOne; 
} 

public void setWeeksAtOne(int weeksAtOne) { 
    this.weeksAtOne = weeksAtOne; 
} 




} 

ответ

1

но почему-то данные did't шоу на textview,

Вы не устанавливаете его нигде, поэтому не удивитесь. Вам нужно позвонить setText() на ваш EditText s (в getView()) после того, как вы сделали с convertView, чтобы заполнить его данными.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 
    if(convertView == null){ 
     convertView = vi.inflate(Resource,null); 
     holder = new ViewHolder(); 
     holder.textJson_ID=(TextView)convertView.findViewById(R.id.textJson_ID); 
     ... 
     convertView.setTag(holder); 
    }else { 
     holder = (ViewHolder)convertView.getTag(); 
    } 


    // populate it with data 
    JsonSongs song = songs.get(position); 
    holder.textJson_ID.setText(song.getSomething()); 
    ... 


    return convertView; 
} 

PS: JsonSongs следует скорее назвать JsonSong. И у вас довольно беспорядок в шаблоне именования.

+0

большое спасибо, это смущение>< –

+0

Я должен задать новый вопрос, но все же получил 60 минут ... так что если вы можете мне помочь, это будет потрясающе, Я дал 21 одинаковые данные, это только показать первый элемент mow Я проверяю, что люди говорят: «Не кладите ListView внутри ScrollView» , чем я проверяю это [ссылка] (http://nex-otaku-en.blogspot.tw/2010/12/android- put-listview-in-scrollview.html) , но я не уверен, что это ответ, и я не могу понять это правильно ... –

+0

Вам нужно задать новый вопрос. Я отменил ваше недавнее редактирование. –

Смежные вопросы