Java ListView在JSON下载后不更新
我正在尝试创建一个简单的android应用程序,从JSON中获取数据,并将其添加到ListView中的自定义行中 我确实从JSON获取了数据,但没有一行显示出来。我发现这是因为行是在JSON完成下载之前“创建”的。下载JSON后如何更新ListViewJava ListView在JSON下载后不更新,java,android,Java,Android,我正在尝试创建一个简单的android应用程序,从JSON中获取数据,并将其添加到ListView中的自定义行中 我确实从JSON获取了数据,但没有一行显示出来。我发现这是因为行是在JSON完成下载之前“创建”的。下载JSON后如何更新ListView public class MainActivity extends AppCompatActivity { private RequestQueue mQueue; private static final String TAG
public class MainActivity extends AppCompatActivity {
private RequestQueue mQueue;
private static final String TAG = "MainActivity";
String isDoneLoading = "false";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "LOG STARTED");
mQueue = Volley.newRequestQueue(this);
ListView listView = (ListView) findViewById(R.id.listView);
ArrayList<News> newsList = new ArrayList<>();
// Create news objects
jsonParse(newsList);
NewsListAdapter adapter = new NewsListAdapter(this, R.layout.row, newsList);
listView.setAdapter(adapter);
Log.d(TAG, "RELOADING LISTVIEW");
}
private void jsonParse(final ArrayList<News> newsArray) {
String url = "https://api.myjson.com/bins/kp9wz";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("employees");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject news_feed = jsonArray.getJSONObject(i);
String headline = news_feed.getString("firstname");
String category = news_feed.getString("mail");
Log.i(TAG, headline);
News newsData = new News(headline, category);
newsArray.add(newsData);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
mQueue.add(request);
}
}
public类MainActivity扩展了AppCompatActivity{
专用请求队列MQUE;
私有静态最终字符串TAG=“MainActivity”;
字符串isDoneLoading=“false”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(标记“日志已启动”);
mQueue=Volley.newRequestQueue(this);
ListView ListView=(ListView)findViewById(R.id.ListView);
ArrayList newsList=新建ArrayList();
//创建新闻对象
jsonParse(新闻列表);
NewsListAdapter=新的NewsListAdapter(this,R.layout.row,newsList);
setAdapter(适配器);
Log.d(标记“重新加载列表视图”);
}
私有void jsonParse(最终ArrayList newsArray){
字符串url=”https://api.myjson.com/bins/kp9wz";
JsonObjectRequest=新的JsonObjectRequest(request.Method.GET,url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONArray JSONArray=response.getJSONArray(“员工”);
for(int i=0;i
尝试此更改
private RequestQueue mQueue;
private static final String TAG = "MainActivity";
String isDoneLoading = "false";
private NewsListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "LOG STARTED");
mQueue = Volley.newRequestQueue(this);
ListView listView = (ListView) findViewById(R.id.listView);
ArrayList<News> newsList = new ArrayList<>();
// Create news objects
jsonParse(newsList);
adapter = new NewsListAdapter(this, R.layout.row, newsList);
listView.setAdapter(adapter);
Log.d(TAG, "RELOADING LISTVIEW");
}
private void jsonParse(final ArrayList<News> newsArray) {
String url = "https://api.myjson.com/bins/kp9wz";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("employees");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject news_feed = jsonArray.getJSONObject(i);
String headline = news_feed.getString("firstname");
String category = news_feed.getString("mail");
Log.i(TAG, headline);
News newsData = new News(headline, category);
newsArray.add(newsData);
}
updateList();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
mQueue.add(request);
}
private void updateList(){
if(adapter != null){
adapter.notifyDataSetChanged();
}
}
私有请求队列MQUE;
私有静态最终字符串TAG=“MainActivity”;
字符串isDoneLoading=“false”;
私有新闻列表适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(标记“日志已启动”);
mQueue=Volley.newRequestQueue(this);
ListView ListView=(ListView)findViewById(R.id.ListView);
ArrayList newsList=新建ArrayList();
//创建新闻对象
jsonParse(新闻列表);
adapter=新的NewsListAdapter(this,R.layout.row,newsList);
setAdapter(适配器);
Log.d(标记“重新加载列表视图”);
}
私有void jsonParse(最终ArrayList newsArray){
字符串url=”https://api.myjson.com/bins/kp9wz";
JsonObjectRequest=新的JsonObjectRequest(request.Method.GET,url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONArray JSONArray=response.getJSONArray(“员工”);
for(int i=0;i
尝试此更改
private RequestQueue mQueue;
private static final String TAG = "MainActivity";
String isDoneLoading = "false";
private NewsListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "LOG STARTED");
mQueue = Volley.newRequestQueue(this);
ListView listView = (ListView) findViewById(R.id.listView);
ArrayList<News> newsList = new ArrayList<>();
// Create news objects
jsonParse(newsList);
adapter = new NewsListAdapter(this, R.layout.row, newsList);
listView.setAdapter(adapter);
Log.d(TAG, "RELOADING LISTVIEW");
}
private void jsonParse(final ArrayList<News> newsArray) {
String url = "https://api.myjson.com/bins/kp9wz";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("employees");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject news_feed = jsonArray.getJSONObject(i);
String headline = news_feed.getString("firstname");
String category = news_feed.getString("mail");
Log.i(TAG, headline);
News newsData = new News(headline, category);
newsArray.add(newsData);
}
updateList();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
mQueue.add(request);
}
private void updateList(){
if(adapter != null){
adapter.notifyDataSetChanged();
}
}
私有请求队列MQUE;
私有静态最终字符串TAG=“MainActivity”;
字符串isDoneLoading=“false”;
私有新闻列表适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(标记“日志已启动”);
mQueue=Volley.newRequestQueue(this);
ListView ListView=(ListView)findViewById(R.id.ListView);
ArrayList newsList=新建ArrayList();
//创建新闻对象
jsonParse(新闻列表);
adapter=新的NewsListAdapter(this,R.layout.row,newsList);
setAdapter(适配器);
Log.d(标记“重新加载列表视图”);
}
私有void jsonParse(最终ArrayList newsArray){
字符串url=”https://api.myjson.com/bins/kp9wz";
JsonObjectRequest=新的JsonObjectRequest(request.Method.GET,url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONArray JSONArray=response.getJSONArray(“员工”);
for(int i=0;itry {
JSONArray jsonArray = response.getJSONArray("employees");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject news_feed = jsonArray.getJSONObject(i);
String headline = news_feed.getString("firstname");
String category = news_feed.getString("mail");
Log.i(TAG, headline);
News newsData = new News(headline, category);
newsArray.add(newsData);
}
// Notify the adapter after the for loop
adapter.notifyDataSetChanged()
} catch (JSONException e) {
e.printStackTrace();
}