【问题标题】:My app screen goes blank while fetching data获取数据时,我的应用程序屏幕变为空白
【发布时间】:2020-03-12 18:58:26
【问题描述】:

我的应用程序从 gaurdian news api 中检索数据并以列表的形式显示,并使用了一个客户数组适配器。每当我运行时,该应用程序什么都没有显示,只是一片空白。在构建或运行期间没有错误。 我找不到我要去哪里错了。

请帮忙...

MainActivity 类

package com.example.newsapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
    private final String url = "https://content.guardianapis.com/search?api-key=98c2fc67-0080-4f70-a3b7-fe216828b82d";
    private ListView mListView;
    private ArrayList<News> news;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        news = new ArrayList<>();
        mListView = findViewById(R.id.list);
        NewsAdapter adapter = new NewsAdapter(this, news);
        mListView.setAdapter(adapter);
        RequestQueue queue = Volley.newRequestQueue(this);
        JsonObjectRequest jsonObjectRequest;
        jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONObject rootResponses = response.getJSONObject("response");
                    JSONArray results = rootResponses.getJSONArray("results");
                    for(int i = 0; i<results.length(); i++){
                        JSONObject newsRoot = results.getJSONObject(i);
                        String title = newsRoot.getString("webTitle");
                        String category = newsRoot.getString("sectionName");
                        String date = newsRoot.getString("webPublicationDate");
                        News newsObj = new News(title, category, date);
                        news.add(newsObj);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("TAG", "Error" + error );
            }
        });
        queue.add(jsonObjectRequest);
    }
}

【问题讨论】:

    标签: java android json android-volley


    【解决方案1】:

    您需要在向 NewsAdapter 添加项目时通知它。否则它不会知道重绘。假设 NewsAdapter 是一个 RecyclerViewAdapter,在onResponse 的末尾调用newsAdapter.notifyDataSetChanged()

    【讨论】:

    • NewsAdapter 是一个 ListViewAdapter。
    • 非常感谢 :) 它也适用于 newsAdapter。感谢您的帮助。
    【解决方案2】:

    问题与活动或您的代码无关。您需要添加启动画面。 这是一种标准的方式。所有应用程序都有一个启动画面。可以使用本教程https://android.jlelse.eu/the-complete-android-splash-screen-guide-c7db82bce565

    【讨论】:

    • 并非所有应用都有启动画面。它甚至不是 Android 中的内置概念。这与他的问题无关
    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 2021-11-06
    • 1970-01-01
    • 2023-03-26
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多