【发布时间】:2016-02-19 11:01:18
【问题描述】:
我从名为 Page Songe 的数据库中设置了一个歌曲列表,单击项目并开始另一个活动,我使用 Intent.putExtra() 将 ID 传递给下一个歌曲信息页面,歌曲信息页面获取 ID,然后调用 FindById API连接数据库以获取歌曲信息,我使用调试模式,它连接到数据库并获取正确的数据,但不知何故它只是没有显示在页面上,是 setter/getter 问题吗?
代码:
public class SongPage extends Activity{
//textview
TextView ID;
TextView artist;
TextView year;
TextView weeks;
TextView songname;
SongInfoHolder SongHolder = new SongInfoHolder();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.songpage);
//get the item id
Intent intent = this.getIntent();
String songID = intent.getStringExtra("itemid");
//connection to the api
new Connection().execute("http://192.168.1.105:3000/findById/" + songID);
SongInfoHolder SongHolder = new SongInfoHolder();
ID = (TextView)findViewById(R.id.textSongPage_ID);
artist = (TextView)findViewById(R.id.textSongPageArtist);
year = (TextView)findViewById(R.id.textSongPageYear);
weeks = (TextView)findViewById(R.id.textSongPageWeeks);
songname = (TextView)findViewById(R.id.textSongPageName);
//set text from getter
}
class Connection 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 finaObject = new JSONObject(finalJson);
//Put string into seter
SongInfoHolder SongHolder = new SongInfoHolder();
SongHolder.set_id(finaObject.getString("_id"));
SongHolder.setDecade(finaObject.getString("decade"));
SongHolder.setArtist(finaObject.getString("artist"));
SongHolder.setSong(finaObject.getString("song"));
SongHolder.setWeeksAtOne(finaObject.getString("weeksAtOne"));
} 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){
ID.setText(SongHolder.get_id());
artist.setText(SongHolder.getArtist());
year.setText(SongHolder.getDecade());
weeks.setText(SongHolder.getWeeksAtOne());
songname.setText(SongHolder.getSong());
}else {
}
}
}
}
获取器/设置器:
public class SongInfoHolder {
private String _id;
private String decade;
private String artist;
private String song;
private String 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 String getWeeksAtOne() {
return weeksAtOne;
}
public void setWeeksAtOne(String weeksAtOne) {
this.weeksAtOne = weeksAtOne;
}
}
【问题讨论】:
-
使用
onPostExecute()方法设置数据。但要小心你造成的内存泄漏。