gpt4 book ai didi

java - 使用 JSON 解析数据创建新对象

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:08 26 4
gpt4 key购买 nike

我正在练习 JSON。我正在使用新闻 api,它只检索新闻的名称、作者和标题。我使用 NewsModel java 类来保存新闻。我可以手动向此类添加数据并在 ListView 中显示。

我解析成功,但无法成功将新闻数据添加到我的模型类。

这是我的 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;
}

}

最佳答案

您必须将对象存储在可以传递给适配器的列表中

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;
ArrayList<NewsModel> newsModels = new ArrayList<>(); //create a list

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);
newsModels.add(newsModel); //keep storing model object in list
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(); //return list here and use that in adapter

}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);

}
}

关于java - 使用 JSON 解析数据创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48850970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com