首页 > 解决方案 > 读取json文件表单主机在活动中显示白屏我该如何解决这个问题?

问题描述

我想从我的主机读取一个 JSON 文件我获得了互联网许可,他们在运行时也不例外,只是一个白屏,我不知道出了什么问题,我该如何解决这个问题?我希望我在 此处创建 json 链接的列表 代码如下

主要活动:

package com.example.moham.twitter_ai;

public class MainActivity extends AppCompatActivity {
   private List<tweets> tweetsList = new ArrayList<>();
   private ListView listView;
   private tweetAdapter madapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listView = findViewById(R.id.list);
    madapter = new tweetAdapter(this, tweetsList);
    listView.setAdapter(madapter);
    gettweets();
 }

void gettweets() {

    String url = "https://mohammedhemaid.000webhostapp.com/jsonTest.json";

    StringRequest postRequest = new StringRequest(Request.Method.GET, url, 
     new Response.Listener<String>() {


        @Override
        public void onResponse(String response) {

            try {
                JSONObject object = new JSONObject(response);
                String tweetText = object.getString("text");
                String date = object.getString("timestamp_ms");
                JSONObject user = object.getJSONObject("user");
                String name = user.getString("name");
                String screen_name = user.getString("screen_name");


                    tweets tw = 
            new tweets(name, screen_name, tweetText,date);
                    tweetsList.add(tw);


            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            Toast.makeText(MainActivity.this,error.getMessage()
            ,Toast.LENGTH_LONG).show();
        }
    });
    Volley.newRequestQueue(this).add(postRequest);
  }
}

适配器 :

 /**
 * Created by moham on 27-Apr-18.
  */

 public class tweetAdapter extends ArrayAdapter<tweets> {


public tweetAdapter(@NonNull Context context,List<tweets> tweets) {
    super(context, 0,tweets);
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull 
  ViewGroup parent) {
    View listItemView = convertView;
    if (listItemView == null) {
        listItemView = LayoutInflater.from(getContext()).inflate(
                R.layout.list_item, parent, false);
    }

    tweets currentTweets = getItem(position);

    TextView name = listItemView.findViewById(R.id.tv_name);
    name.setText(currentTweets.getName());

    TextView screenName = listItemView.findViewById(R.id.tv_screen_name);
    screenName.setText(currentTweets.getScreenName());

    TextView tweetText = listItemView.findViewById(R.id.tv_tweet_text);
    tweetText.setText(currentTweets.getTweet());

    Date dateObject = new Date(currentTweets.getTimeStamp());

    TextView dateView =  listItemView.findViewById(R.id.date);
    // Format the date string (i.e. "Mar 3, 1984")

    dateView.setText(currentTweets.getTimeStamp());

    return listItemView;
  }
}

错误:(logCat)

json文件:

{"created_at":"Mon Mar 26 18:24:04 +0000 2018","id":978336799520100352,"id_str":"978336799520100352","text":"Ik wilde gwn een gratis gun en die krijg ik nu dus \ud83d\ude02 https:\/\/t.co\/AH38GYbUfk","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":964059877223084032,"id_str":"964059877223084032","name":"Wessel hoek","screen_name":"teddybeer025","location":null,"url":null,"description":"ik speel fortnite op de ps4","translator_type":"none","protected":false,"verified":false,"followers_count":2,"friends_count":10,"listed_count":1,"favourites_count":17,"statuses_count":7,"created_at":"Thu Feb 15 08:52:40 +0000 2018","utc_offset":null,"time_zone":null,"geo_enabled":false,"lang":"nl","contributors_enabled":false,"is_translator":false,"profile_background_color":"F5F8FA","profile_background_image_url":"","profile_background_image_url_https":"","profile_background_tile":false,"profile_link_color":"1DA1F2","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/964065505513476102\/4hCVGSKG_normal.jpg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/964065505513476102\/4hCVGSKG_normal.jpg","default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"is_quote_status":false,"quote_count":0,"reply_count":0,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[],"urls":[{"url":"https:\/\/t.co\/AH38GYbUfk","expanded_url":"https:\/\/itunes.apple.com\/app\/id1333542838","display_url":"itunes.apple.com\/app\/id13335428\u2026","indices":[53,76]}],"user_mentions":[],"symbols":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"filter_level":"low","lang":"nl","timestamp_ms":"1522088644281"}

我做错了什么?

标签: androidjson

解决方案


您在获取之前添加了空列表,因此当您将项目添加到列表时,适配器不知道它需要刷新。将所有新项目添加到列表后,请致电:

madapter.notifyDatasetChanged()

刷新您的适配器。

此外,您的 json 似乎不是一个有效的。我已经用JsonLint对其进行了测试,它看起来像一个推文列表,但它没有包含在 [] 中,也没有用逗号分隔。

如果您的 json 是有效的推文数组,您的代码应如下所示:

JSONArray objs = new JSONArray(response);
for(JSONObject object : objs){
   String tweetText = object.getString("text");
   String date = object.getString("timestamp_ms");
   JSONObject user = object.getJSONObject("user");
   String name = user.getString("name");
   String screen_name = user.getString("screen_name");
   tweets tw = 
                new tweets(name, screen_name, tweetText,date);
                        tweetsList.add(tw);
}
madapter.notifyDatasetChanged();

推荐阅读