Java 如何将数据正确地从一个活动传递到另一个活动?
目前,我正在开发一个新闻应用程序,我已经实现了Webview,但URL并没有加载数据并显示空屏幕。我已经学习了一些教程,其中可以使用Intent Parcelable传递对象。我想实现的是,当用户单击文章项时,我想使用Parcelable显示相应的url show it web视图,但显示的是白色屏幕 下面是我实施webview的DetailActivity中的代码Java 如何将数据正确地从一个活动传递到另一个活动?,java,android,webview,parcelable,Java,Android,Webview,Parcelable,目前,我正在开发一个新闻应用程序,我已经实现了Webview,但URL并没有加载数据并显示空屏幕。我已经学习了一些教程,其中可以使用Intent Parcelable传递对象。我想实现的是,当用户单击文章项时,我想使用Parcelable显示相应的url show it web视图,但显示的是白色屏幕 下面是我实施webview的DetailActivity中的代码 public class DetailActivity extends Activity{ @BindView(R.id.
public class DetailActivity extends Activity{
@BindView(R.id.article)
public WebView article_webview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.detail_activity);
ButterKnife.bind(this);
Article object = (Article) getIntent().getParcelableExtra("myDataKey");
article_webview.getSettings().setJavaScriptEnabled(true);
article_webview.loadUrl("myDataKey");
}
public class WebViewController extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return true;
}
}
**below my parcelable Model Article class **
public class Article implements Parcelable {
@SerializedName("source")
@Expose
private Source source;
@SerializedName("author")
@Expose
private String author;
@SerializedName("title")
@Expose
private String title;
@SerializedName("description")
@Expose
private String description;
@SerializedName("url")
@Expose
private String url;
@SerializedName("urlToImage")
@Expose
private String urlToImage;
@SerializedName("publishedAt")
@Expose
private String publishedAt;
@SerializedName("content")
@Expose
private String content;
public Source getSource() {
return source;
}
public void setSource(Source source) {
this.source = source;
}
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 String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUrlToImage() {
return urlToImage;
}
public void setUrlToImage(String urlToImage) {
this.urlToImage = urlToImage;
}
public String getPublishedAt() {
return publishedAt;
}
public void setPublishedAt(String publishedAt) {
this.publishedAt = publishedAt;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Article(Parcel in) {
source = (Source) in.readValue(Source.class.getClassLoader());
author = in.readString();
title = in.readString();
description = in.readString();
url = in.readString();
urlToImage = in.readString();
publishedAt = in.readString();
content = in.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeValue(source);
dest.writeString(author);
dest.writeString(title);
dest.writeString(description);
dest.writeString(url);
dest.writeString(urlToImage);
dest.writeString(publishedAt);
dest.writeString(content);
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<Article> CREATOR = new Parcelable.Creator<Article>() {
@Override
public Article createFromParcel(Parcel in) {
return new Article(in);
}
@Override
public Article[] newArray(int size) {
return new Article[size];
}
};
}
低于世界新闻级
公共级世界新闻{
@SerializedName("status")
@Expose
private String status;
@SerializedName("totalResults")
@Expose
private Integer totalResults;
@SerializedName("articles")
@Expose
private List<Article> articles = null;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getTotalResults() {
return totalResults;
}
public void setTotalResults(Integer totalResults) {
this.totalResults = totalResults;
}
public List<Article> getArticles() {
return articles;
}
public void setArticles(List<Article> articles) {
this.articles = articles;
}
@SerializedName(“状态”)
@暴露
私有字符串状态;
@SerializedName(“totalResults”)
@暴露
私有整数结果;
@序列化名称(“文章”)
@暴露
私有列表项目=null;
公共字符串getStatus(){
返回状态;
}
公共无效设置状态(字符串状态){
这个状态=状态;
}
公共整数getTotalResults(){
返回结果;
}
公共void setTotalResults(整数totalResults){
this.totalResults=totalResults;
}
公共列表getArticles(){
归还物品;
}
公共物品(列出物品){
这个.文章=文章;
}
}您只是从MainActivity传递url(请勾选此行) 因此,您将在下一个类中只获得url,而不是整个对象 请替换以下行
Article object = (Article) getIntent().getParcelableExtra("myDataKey"); article_webview.getSettings().setJavaScriptEnabled(true);
article_webview.loadUrl("myDataKey");
为此:
String url = getIntent().getStringExtra("myDataKey");
article_webview.getSettings().setJavaScriptEnabled(true);
article_webview.loadUrl(url);
返回一个空的文章
,因为包裹。获取()
是一个空的包裹
。创建一篇文章
,例如:
Article article = new Article(Parcel.obtain());
article.setUrl("https://google.com");
然后打电话
i.putExtra("myDataKey", article);
而不是i.putExtra(“myDataKey”,article.getUrl())代码>
在DetailActivity
调用的onCreate()
中
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.detail_activity);
ButterKnife.bind(this);
Article object = (Article) getIntent().getParcelableExtra("myDataKey");
article_webview.getSettings().setJavaScriptEnabled(true);
article_webview.setWebViewClient(new WebViewClient());
article_webview.loadUrl(object.getUrl());
}
更新:
从MainActivity
中删除startActivity(i)
调用,并将此行添加到NewsAdapter的onClick()
intent.putExtra("myDataKey", article);
这将把文章
传递到详细活动
请尝试“getUrl().toString”您在发布的代码中没有实际使用url。所以这当然是一个空屏幕。@Gabeschen在这种情况下你的建议是什么?它不起作用,我已经按照你告诉我的那样做了,它显示为白色屏幕。在这种情况下,请检查你是否通过调试在另一个类中获得url,或者通过日志打印它,如果它起作用,还可以在chrome n chcek中打开该url。我已检查调试文章是否有效空,但url在Chrome上打开。您的建议是什么?在这种情况下,您将在Detailactivity检查中只得到url字符串,如果该字符串为空。@我不明白您在说什么
public class Article implements Parcelable {
@SerializedName("source")
@Expose
private Source source;
@SerializedName("author")
@Expose
private String author;
@SerializedName("title")
@Expose
private String title;
@SerializedName("description")
@Expose
private String description;
@SerializedName("url")
@Expose
private String url;
@SerializedName("urlToImage")
@Expose
private String urlToImage;
@SerializedName("publishedAt")
@Expose
private String publishedAt;
@SerializedName("content")
@Expose
private String content;
public Source getSource() {
return source;
}
public void setSource(Source source) {
this.source = source;
}
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 String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUrlToImage() {
return urlToImage;
}
public void setUrlToImage(String urlToImage) {
this.urlToImage = urlToImage;
}
public String getPublishedAt() {
return publishedAt;
}
public void setPublishedAt(String publishedAt) {
this.publishedAt = publishedAt;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Article(Parcel in) {
source = (Source) in.readValue(Source.class.getClassLoader());
author = in.readString();
title = in.readString();
description = in.readString();
url = in.readString();
urlToImage = in.readString();
publishedAt = in.readString();
content = in.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeValue(source);
dest.writeString(author);
dest.writeString(title);
dest.writeString(description);
dest.writeString(url);
dest.writeString(urlToImage);
dest.writeString(publishedAt);
dest.writeString(content);
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<Article> CREATOR = new Parcelable.Creator<Article>() {
@Override
public Article createFromParcel(Parcel in) {
return new Article(in);
}
@Override
public Article[] newArray(int size) {
return new Article[size];
}
};
}
@SerializedName("status")
@Expose
private String status;
@SerializedName("totalResults")
@Expose
private Integer totalResults;
@SerializedName("articles")
@Expose
private List<Article> articles = null;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getTotalResults() {
return totalResults;
}
public void setTotalResults(Integer totalResults) {
this.totalResults = totalResults;
}
public List<Article> getArticles() {
return articles;
}
public void setArticles(List<Article> articles) {
this.articles = articles;
}
public class Source {
@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@SerializedName("status")
@Expose
private String status;
@SerializedName("totalResults")
@Expose
private Integer totalResults;
@SerializedName("articles")
@Expose
private List<Article> articles = null;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getTotalResults() {
return totalResults;
}
public void setTotalResults(Integer totalResults) {
this.totalResults = totalResults;
}
public List<Article> getArticles() {
return articles;
}
public void setArticles(List<Article> articles) {
this.articles = articles;
}
i.putExtra("myDataKey", article.getUrl());
Article object = (Article) getIntent().getParcelableExtra("myDataKey"); article_webview.getSettings().setJavaScriptEnabled(true);
article_webview.loadUrl("myDataKey");
String url = getIntent().getStringExtra("myDataKey");
article_webview.getSettings().setJavaScriptEnabled(true);
article_webview.loadUrl(url);
Article article = new Article(Parcel.obtain());
Article article = new Article(Parcel.obtain());
article.setUrl("https://google.com");
i.putExtra("myDataKey", article);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.detail_activity);
ButterKnife.bind(this);
Article object = (Article) getIntent().getParcelableExtra("myDataKey");
article_webview.getSettings().setJavaScriptEnabled(true);
article_webview.setWebViewClient(new WebViewClient());
article_webview.loadUrl(object.getUrl());
}
intent.putExtra("myDataKey", article);