提问人:Rizwan Shaikh 提问时间:4/30/2019 最后编辑:PhantômaxxRizwan Shaikh 更新时间:5/10/2019 访问量:139
执行方法 null 指针异常中的错误
Error in execute method null pointer exception
问:
我正在尝试在我的应用程序中实现 RSS 提要。我从网站上获取了这段代码。我在按钮单击侦听器和滑动刷新侦听器中的执行方法附近获得 Java.lang.NullPointerException。我的应用无法启动;它只是在Android手机中抛出错误。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView)
findViewById(R.id.recyclerView);
mEditText = (EditText)
findViewById(R.id.rssFeedEditText);
mFetchFeedButton = (Button)
findViewById(R.id.fetchFeedButton);
mSwipeLayout = (SwipeRefreshLayout)
findViewById(R.id.swipeRefreshLayout);
mFeedTitleTextView = (TextView)
findViewById(R.id.feedTitle);
mFeedDescriptionTextView = (TextView)
findViewById(R.id.feedDescription);
mFeedLinkTextView = (TextView)
findViewById(R.id.feedLink);
mRecyclerView.setLayoutManager(new
LinearLayoutManager(this));
mFetchFeedButton.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
new FetchFeedTask().execute((Void) null);
}
});
mSwipeLayout.setOnRefreshListener(new
SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new FetchFeedTask().execute((Void) null);
}
});
}
}
// FetchFeedTask class
private class FetchFeedTask extends AsyncTask<Void,
Void, Boolean> {
private String urlLink;
@Override
protected void onPreExecute() {
mSwipeLayout.setRefreshing(true);
urlLink = mEditText.getText().toString();
}
@Override
protected Boolean doInBackground(Void... voids) {
if (TextUtils.isEmpty(urlLink))
return false;
try {
if(!urlLink.startsWith("http://") &&
!urlLink.startsWith("https://"))
urlLink = "http://" + urlLink;
URL url = new URL(urlLink);
InputStream inputStream =
url.openConnection().getInputStream();
mFeedModelList = parseFeed(inputStream);
return true;
} catch (IOException e) {
Log.e(TAG, "Error", e);
} catch (XmlPullParserException e) {
Log.e(TAG, "Error", e);
}
return false;
}
@Override
protected void onPostExecute(Boolean success) {
mSwipeLayout.setRefreshing(false);
if (success) {
mFeedTitleTextView.setText("Feed Title: " +
mFeedTitle);
mFeedDescriptionTextView.setText("Feed
Description: " + mFeedDescription);
mFeedLinkTextView.setText("Feed Link: " +
mFeedLink);
// Fill RecyclerView
mRecyclerView.setAdapter(new
RssFeedListAdapter(mFeedModelList));
} else {
Toast.makeText(MainActivity.this,
"Enter a valid Rss feed url",
Toast.LENGTH_LONG).show();
}
}
}
答:
0赞
Viswanath Kumar Sandu
5/10/2019
#1
您应该使用没有任何参数的方法。最重要的是,不是可以作为参数传入方法的数据类型。.execute()
Void
所以只需使用
new FetchFeedTask().execute();
而不是
new FetchFeedTask().execute((Void) null);
在两个 Click 侦听器中
评论