1

我是Android开发的初学者!我正在尝试插入片段解析数据尝试修复错误但我有一个错误“输出无法解析为变量”

  @Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
    ProgressDialog mProgressDialog = new ProgressDialog(getActivity());
    mProgressDialog.setCancelable(false);
    mProgressDialog.setCanceledOnTouchOutside(false);
    mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    mProgressDialog.setMessage("Загрузка данных");
    mProgressDialog.show();
    new ParseSite().execute("http://www.babyblog.ru/magazine/");
    View view = inflater.inflate(R.layout.magazine, container, false);  
    ListView listview = (ListView) view.findViewById(R.id.listViewData);
    listview.setAdapter(new ArrayAdapter<String>(getActivity().getApplicationContext(),
            android.R.layout.simple_list_item_1 , output));
    return view;
}
private class ParseSite extends AsyncTask<String, Void, List<String>> {
    protected List<String> doInBackground(String... arg) {
      List<String> output = new ArrayList<String>();
      try
      {
       HtmlHelper hh = new HtmlHelper(new URL(arg[0]));
        List<TagNode> links = hh.getLinksByClass("razdel-name");

        for (Iterator<TagNode> iterator = links.iterator(); iterator.hasNext();)
        {
          TagNode divElement = (TagNode) iterator.next();
          output.add(divElement.getText().toString());
        }
      }
      catch(Exception e)
      {
        e.printStackTrace();
      }
      return output;
    }
}

}

4

2 回答 2

4

变量“输出”尚未定义。

IE

 listview.setAdapter(new ArrayAdapter<String>(getActivity().getApplicationContext(),
        android.R.layout.simple_list_item_1 , output));

该变量不在范围内。

您尝试在片段的 onCreate 中使用它,但它是在 ASyncTask 类中声明的。

您需要阅读有关 ASyncTasks 以及如何使用它们的信息。

http://developer.android.com/guide/components/processes-and-threads.html#WorkerThreads

作为捷径,试试这个:

public class YourFragment extends Fragment {

  ListView listview;

    @Override
public View onCreateView(
   // other stuff
   listview = (ListView) view.findViewById(R.id.listViewData); 
   // remove the setAdapater line

}

private class ParseSite extends AsyncTask<String, Void, List<String>> {

   // other stuff

   protected void onPostExecute(List<String> result) {
      listview.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1 , output));
   }
}
于 2013-09-08T18:08:35.220 回答
0

您的output变量仍然为空。您必须在 AsyncTask 中实现 onPostExecute(List result)。这将为您提供所需的输出。

这篇博文可以解释它是如何AsyncTask工作的。但要小心,AsyncTask 有几个隐藏的陷阱。在这里阅读所有相关信息

于 2013-09-08T18:11:00.243 回答