编辑忘了包括实际问题。null return当我应该得到一个<String> **编辑**
Soo我知道我的文件正在返回null,因为我的“GetData()”调用正在流经余下的我的脚本导致错误。但是,我不知道如何防止这种情况。有人能指出我正确的方向吗?
问题 我得到的错误是 Attempt to invoke virtual method 'java.lang.Object[] java.util.ArrayList.toArray()' on a null object reference
当我用线 titles = readRss.titles;
它拉过这个order.ReadRss空响应>的processXML()> GETDATA() 并且因为获取数据是“try”“catch”部分,它将返回xmldoc和null。
当我在我的ProcessXml()内登录时,我可以获得完整的标题列表,但我可以单独记录供稿项目,但是如果我尝试在其外部记录时返回null。
我是什么误解。
ReadRss脚本:
public class ReadRss extends AsyncTask<Void, Void, Void> {
ArrayList<String>titles;
BlankFragment context;
String address="https://www.sciencemag.org/rss/news_current.xml";
//ProgressDialog progressDialog;
ArrayList<FeedItem> feedItems;
RecyclerView recyclerView;
URL url;
public ReadRss(BlankFragment context, RecyclerView recyclerView){
this.recyclerView=recyclerView;
this.context=context;
// progressDialog = new ProgressDialog(context);
// progressDialog.setMessage("Loading...");
}
@Override
protected void onPreExecute() {
//progressDialog.show();
super.onPreExecute();
}
@Override
public void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
//progressDialog.dismiss();
}
@Override
public Void doInBackground(Void... voids) {
ProcessXml(Getdata());
return null;
}
public ArrayList<String> ProcessXml(Document data) {
if (data!=null) {
titles=new ArrayList<>();
feedItems=new ArrayList<>();
Element root=data.getDocumentElement();
Node channel=root.getChildNodes().item(1);
NodeList items=channel.getChildNodes();
for (int i=0;i<items.getLength();i++){
Node currentchild=items.item(i);
if (currentchild.getNodeName().equalsIgnoreCase("item")){
FeedItem item=new FeedItem();
NodeList itemchilds=currentchild.getChildNodes();
for (int j=0;j<itemchilds.getLength();j++){
Node current=itemchilds.item(j);
if (current.getNodeName().equalsIgnoreCase("title")){
item.setTitle(current.getTextContent());
titles.add(current.getTextContent());
}else if (current.getNodeName().equalsIgnoreCase("description")){
item.setDescription(current.getTextContent());
}else if (current.getNodeName().equalsIgnoreCase("pubDate")){
item.setPubDate(current.getTextContent());
}else if (current.getNodeName().equalsIgnoreCase("link")){
item.setLink(current.getTextContent());
}else if (current.getNodeName().equalsIgnoreCase("media:thumbnail")){
String url=current.getAttributes().item(0).getTextContent();
item.setThumbnailUrl(url);
}
}
feedItems.add(item);
Log.d("hello", item.getTitle());
}
}
}
return titles;
}
public Document Getdata(){
try{
url = new URL(address);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream inputStream = connection.getInputStream();
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document xmlDoc = builder.parse(inputStream);
return xmlDoc;
} catch (Exception e){
e.printStackTrace();
}
return null;
}
}
BlankFragment脚本中调用的标题。
public class BlankFragment extends Fragment {
ArrayList<FeedItem>feedItems;
ArrayList<String>titles;
String address="https://www.sciencemag.org/rss/news_current.xml";
URL url;
public BlankFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@TargetApi(Build.VERSION_CODES.N)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_blank, container, false);
RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.rv_recycler_view);
rv.setHasFixedSize(true);
ReadRss readRss = new ReadRss(this, rv);
readRss.getClass();
titles = readRss.titles;
String[] display_titles = (String[]) titles.toArray();
//Document data = readRss.Getdata();
//ArrayList<FeedItem> feedItems = readRss.ProcessXml(data);
MyAdapter adapter = new MyAdapter(display_titles);
rv.setAdapter(adapter);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
rv.setLayoutManager(llm);
return rootView;
}
}
我的回答下面有帮助你吗?你可以通过记录当'标题'被实例化和使用时间来测试它 - 它可以让你知道哪一个会先发生 –
对不起,假期让我失去了。我现在刚刚回到这个项目。谢谢,它确实帮助了我很多。 – Jahi