【发布时间】:2018-02-22 00:38:50
【问题描述】:
我正在练习 JSON。我正在使用新闻 api,我只检索新闻的名称、作者和标题。 我使用 NewsModel java 类来保存新闻。手动,我可以将数据添加到此类并显示在列表视图中。
我解析成功,但我无法成功地将新闻数据添加到我的模型类中。
这是我的 MainActivity(解析和添加数据到模型类)
public class MainActivity extends AppCompatActivity {
public TextView textView_parse;
private Button button_parse, button_list;
public NewsModel newsModel;
public double temp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
textView_parse = (TextView)findViewById(R.id.textView_parse);
button_parse = (Button) findViewById(R.id.button_parse);
button_list = (Button)findViewById(R.id.button_list);
//
button_parse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new JSONParsing().execute("https://newsapi.org/v2/top-headlines?sources=abc-news&apiKey=b1ed0a1fd9ca444fa9a9dd52b754fc6b");
}
});
button_list.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this, NewsListActivity.class));
}
});
}
private class JSONParsing extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... strings) {
HttpURLConnection httpURLConnection = null;
BufferedReader bufferedReader = null;
try{
URL url = new URL(strings[0]);
httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.connect();
InputStream stream = httpURLConnection.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(stream));
StringBuffer stringBuffer = new StringBuffer();
String line = "";
while((line = bufferedReader.readLine()) != null){
stringBuffer.append(line);
}
String finalJson = stringBuffer.toString();
StringBuffer finalBuffer = new StringBuffer();
JSONObject jsonObject = new JSONObject(finalJson);
JSONArray parentArray = jsonObject.getJSONArray("articles");
for(int i=0; i<parentArray.length(); i++){
JSONObject parentObject = parentArray.getJSONObject(i);
JSONObject secondObject = parentObject.getJSONObject("source");
String name = secondObject.getString("name");
String author = parentObject.getString("author");
String title = parentObject.getString("title");
newsModel = new NewsModel(name,author,title,i);
finalBuffer.append("Name: "+name+"\n\n"+ "Author: "+author+ "\n\n"+ "Title: "+title+"\n\n\n\n");
}
/* tek çekim
JSONObject parentObject = parentArray.getJSONObject(0);
String title = parentObject.getString("title");
*/
return finalBuffer.toString();
}catch (IOException e){
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
textView_parse.setText(s);
}
}
}
这是我的模型类;
public class NewsModel {
String name;
String author;
String title;
int id;
public NewsModel(){}
public NewsModel(String name, String author, String title, int id) {
this.name = name;
this.author = author;
this.title = title;
this.id=id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
这是我的适配器类;
public class Adapter_NewsList extends BaseAdapter {
private Context mContext;
public List<NewsModel> mNewsList;
public Adapter_NewsList(Context mContext, List<NewsModel> mNewsList) {
this.mContext = mContext;
this.mNewsList = mNewsList;
}
@Override
public int getCount() {
return mNewsList.size();
}
@Override
public Object getItem(int i) {
return mNewsList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View myView = View.inflate(mContext, R.layout.item_news_list,null);
TextView textView_name = (TextView)myView.findViewById(R.id.textView_name);
TextView textView_author = (TextView)myView.findViewById(R.id.textView_author);
TextView textView_title = (TextView)myView.findViewById(R.id.textView_title);
textView_name.setText(mNewsList.get(i).getName());
textView_author.setText(mNewsList.get(i).getAuthor());
textView_title.setText(mNewsList.get(i).getTitle());
myView.setTag(mNewsList.get(i).getId());
return myView;
}
}
【问题讨论】:
-
您没有将模型对象添加到列表中,也没有将其设置到适配器。 This 可能会给你一些想法。