android - 读取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"}
我做错了什么?
解决方案
您在获取之前添加了空列表,因此当您将项目添加到列表时,适配器不知道它需要刷新。将所有新项目添加到列表后,请致电:
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();
推荐阅读
- flutter - 颤振的问题
- laravel - 如何在同一列中加入具有多个 id 的表?
- excel - 即使 Application.On 时间安排已关闭,Excel 文件也会一直打开
- javascript - 从 nextcloud api 获取用户信息
- python - 提取重复的 JSON 标签
- python - 如何在 Jupyter 笔记本中将视频文件的帧显示为 gif 而无需写入文件
- sql - SQL查询 - 填充缺失值
- python - EarlyStopping 是否采用最后一个时期或最后最好成绩的模型?
- php - 在 Woocommerce 管理订单页面中更改文本“计费”和“运输”
- dll - 在 Inno Setup 中加载具有依赖项的 DLL 在卸载程序中失败并显示“无法导入 DLL”,但在安装程序中有效