- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 bundle 内的适配器中的意图获取值,但它似乎给了我一个空指针异常
我不确定,据我所知,获取额外 bundle 给了我一个 NPE,但不知道如何修复它 //首先是适配器 公共(public)类 ArticleAdapter 扩展 RecyclerView.Adapter {
class MyViewHolder extends RecyclerView.ViewHolder {
TextView category;
TextView title;
ImageView image;
TextView pubDate;
MyViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.row_title);
image = (ImageView) view.findViewById(R.id.row_image);
pubDate = (TextView) view.findViewById(R.id.row_pubDate);
category = (TextView) view.findViewById(R.id.row_categories);
}
}
@NotNull
@Override
public MyViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row,parent, false);
return new MyViewHolder(v);
}
private List<Article> articles;
private Context mContext;
private WebView articleView;
public ArticleAdapter(List<Article> list, Context context) {
this.articles = list;
this.mContext = context;
}
public List<Article> getArticleList() {
return articles;
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolder viewHolder, int position) {
Article currentArticle = articles.get(position);
Log.e("article", currentArticle.getTitle());
String pubDateString;
try {
String sourceDateString = currentArticle.getPubDate();
SimpleDateFormat sourceSdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
Date date = sourceSdf.parse(sourceDateString);
SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy", Locale.getDefault());
pubDateString = sdf.format(date);
} catch (ParseException e) {
e.printStackTrace();
pubDateString = currentArticle.getPubDate();
}
viewHolder.title.setText(currentArticle.getTitle());
Picasso.get()
.load(currentArticle.getImage())
.placeholder(R.drawable.placeholder)
.into(viewHolder.image);
viewHolder.pubDate.setText(pubDateString);
StringBuilder categories = new StringBuilder();
for (int i = 0; i < currentArticle.getCategories().size(); i++) {
if (i == currentArticle.getCategories().size() - 1) {
categories.append(currentArticle.getCategories().get(i));
} else {
categories.append(currentArticle.getCategories().get(i)).append(", ");
}
}
viewHolder.category.setText(categories.toString());
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetJavaScriptEnabled")
@Override
public void onClick(View view) {
articleView = new WebView(mContext);
articleView.getSettings().setLoadWithOverviewMode(true);
String title = articles.get(viewHolder.getAdapterPosition()).getTitle();
String content = articles.get(viewHolder.getAdapterPosition()).getContent();
articleView.getSettings().setJavaScriptEnabled(true);
articleView.setHorizontalScrollBarEnabled(false);
articleView.setWebChromeClient(new WebChromeClient());
articleView.loadDataWithBaseURL(null, "<style>img{display: inline; height: auto; max-width: 100%;} " +
"</style>\n" + "<style>iframe{ height: auto; width: auto;}" + "</style>\n" + content, null, "utf-8", null);
Intent intent = new Intent(mContext,DetailActivity.class);
intent.putExtra("setTitle",title);
intent.putExtra("setContent",content);
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return articles == null ? 0 : articles.size();
}
}
//the Activity code
public class DetailActivity extends AppCompatActivity {
DetailFragment mDetailFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
DetailFragment mDetailFragment = (DetailFragment)getSupportFragmentManager().findFragmentByTag("TAG");
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
mDetailFragment.setTitle((String) bundle.get("setTitle"));
showDetailFragment();
}
private void startTransactionFragment(Fragment fragment) {
if (!fragment.isVisible()) {
getSupportFragmentManager().beginTransaction().add(R.id.detail_activity_frame_layout, fragment).commit();
}
}
private void showDetailFragment() {
if (this.mDetailFragment == null) this.mDetailFragment = DetailFragment.newInstance();
this.startTransactionFragment(this.mDetailFragment);
}
}
//the fragment code
public class DetailFragment extends Fragment {
@BindView(R.id.detail_title) TextView title;
@BindView(R.id.detail_content) WebView content;
private WebView articleView;
public DetailFragment() { }
public static DetailFragment newInstance () {
return (new DetailFragment());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.fragment_detail, container, false);
ButterKnife.bind(this, view);
return view;
}
public void setTitle(String s){ title.setText(s); }
public void setContent(String s){
articleView = new WebView(getContext());
articleView.getSettings().setLoadWithOverviewMode(true);
articleView.getSettings().setJavaScriptEnabled(true);
articleView.setHorizontalScrollBarEnabled(false);
articleView.setWebChromeClient(new WebChromeClient());
articleView.loadDataWithBaseURL(null, "<style>img{display: inline; height: auto; max-width: 100%;} " +
"</style>\n" + "<style>iframe{ height: auto; width: auto;}" + "</style>\n" + s, null, "utf-8", null);
}
}
//and finally the xml code for both
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Controllers.Fragments.DetailFragment"
android:tag="TAG">
<TextView
android:id="@+id/detail_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="TITLE"
android:textSize="50dp"/>
<WebView
android:id="@+id/detail_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ARTICLE"
android:textSize="20dp"
android:layout_gravity="center"/>
</LinearLayout>
//activity xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/detail_activity_frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Controllers.Activities.DetailActivity">
</FrameLayout>
更新的堆栈跟踪:
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.rssreader, PID: 25621 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.rssreader/com.example.rssreader.Controllers.Activities.DetailActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.rssreader.Controllers.Fragments.DetailFragment.setTitle(java.lang.String)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.rssreader.Controllers.Fragments.DetailFragment.setTitle(java.lang.String)' on a null object reference at com.example.rssreader.Controllers.Activities.DetailActivity.onCreate(DetailActivity.java:28) at android.app.Activity.performCreate(Activity.java:7009) at android.app.Activity.performCreate(Activity.java:7000) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
最佳答案
发生这种情况是因为 mDetailFragment
未初始化。
堆栈跟踪显示 mDetailFragment
= null
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.rssreader.Controllers.Fragments.DetailFragment.setTitle(java.lang.String)' on a null
基本上你需要做的就是这个
// Let's first dynamically add a fragment into a frame container, that is your xml like a LinearLayout
getSupportFragmentManager().beginTransaction().
replace(R.id.YOUR_XML, new DetailFragment(), "SOMETAG").
commit();
// Now later we can lookup the fragment by tag
DetailFragment mDetailFragment = (DetailFragment)
getSupportFragmentManager().findFragmentByTag("SOMETAG");
要使用片段,本教程中介绍了几种方法 Creating and Using Fragments
UPDATE
将 onCreate()
更改为如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
DetailFragment fragment = (DetailFragment)getSupportFragmentManager().findFragmentByTag("TAG");
if(fragment == NULL){
fragment = DetailFragment.newInstance();
}
fragment.setTitle((String) bundle.get("setTitle"));
startTransactionFragment(fragment);
}
我还没有测试过代码,只是从我的脑海中测试出来的。
关于java - 我需要帮助来修复此 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56426666/
我正在尝试用 C 语言编写一个使用 gstreamer 的 GTK+ 应用程序。 GTK+ 需要 gtk_main() 来执行。 gstreamer 需要 g_main_loop_run() 来执行。
我已经使用 apt-get 安装了 opencv。我得到了以下版本的opencv2,它工作正常: rover@rover_pi:/usr/lib/arm-linux-gnueabihf $ pytho
我有一个看起来像这样的 View 层次结构(基于其他答案和 Apple 的使用 UIScrollView 的高级 AutoLayout 指南): ScrollView 所需的2 个步骤是: 为 Scr
我尝试安装 udev。 udev 在 ./configure 期间给我一个错误 --exists: command not found configure: error: pkg-config and
我正在使用 SQLite 3。我有一个表,forums,有 150 行,还有一个表,posts,有大约 440 万行。每个帖子都属于一个论坛。 我想从每个论坛中选择最新帖子的时间戳。如果我使用 SEL
使用 go 和以下包: github.com/julienschmidt/httprouter github.com/shwoodard/jsonapi gopkg.in/mgo.v2/bson
The database仅包含 2 个表: 钱包(100 万行) 事务(1500 万行) CockroachDB 19.2.6 在 3 台 Ubuntu 机器上运行 每个 2vCPU 每个 8GB R
我很难理解为什么在下面的代码中直接调用 std::swap() 会导致编译错误,而使用 std::iter_swap 编译却没有任何错误. 来自 iter_swap() versus swap() -
我有一个非常简单的 SELECT *用 WHERE NOT EXISTS 查询条款。 SELECT * FROM "BMAN_TP3"."TT_SPLDR_55E63A28_59358" SELECT
我试图按部分组织我的 .css 文件,我需要从任何文件访问文件组中的任何类。在 Less 中,我可以毫无问题地创建一个包含所有文件导入的主文件,并且每个文件都导入主文件,但在 Sass 中,我收到一个
Microsoft.AspNet.SignalR.Redis 和 StackExchange.Redis.Extensions.Core 在同一个项目中使用。前者需要StackExchange.Red
这个问题在这里已经有了答案: Updating from Rails 4.0 to 4.1 gives sass-rails railties version conflicts (4 个答案) 关
我们有一些使用 Azure DevOps 发布管道部署到的现场服务器。我们已经使用这些发布管道几个月了,没有出现任何问题。今天,我们在下载该项目的工件时开始出现身份验证错误。 部署组中的节点显示在线,
Tip: instead of creating indexes here, run queries in your code – if you're missing any indexes, you
你能解释一下 Elm 下一个声明中的意思吗? (=>) = (,) 我在 Elm architecture tutorial 的例子中找到了它 最佳答案 这是中缀符号。实际上,这定义了一个函数 (=>
我需要一个 .NET 程序集查看器,它可以显示低级详细信息,例如元数据表内容等。 最佳答案 ildasm 是 IL 反汇编程序,具有低级托管元数据 token 信息。安装 Visual Studio
我有两个列表要在 Excel 中进行比较。这是一个很长的列表,我需要一个 excel 函数或 vba 代码来执行此操作。我已经没有想法了,因此转向你: **Old List** A
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
我正在学习 xml 和 xml 处理。我无法很好地理解命名空间的存在。 我了解到命名空间帮助我们在 xml 中分离相同命名的元素。我们不能通过具有相同名称的属性来区分元素吗?为什么命名空间很重要或需要
我搜索了 Azure 文档、各种社区论坛和 google,但没有找到关于需要在公司防火墙上打开哪些端口以允许 Azure 所有组件(blob、sql、compute、bus、publish)的简洁声明
我是一名优秀的程序员,十分优秀!