java - 具有异步任务的 fragment 中的 ListView

标签 java android json listview android-fragments

my error log 我尝试在 fragment 中加载 ListView 。但是我的应用程序在单击按钮填充 ListView 时崩溃。我不知道我犯了什么错误。任何帮助将不胜感激。我已经尝试了大部分与此相关的东西..但没有什么效果很好。(我删除了一些代码以避免看起来笨拙)

这是我的 fragment 代码:

public class Func extends Fragment {

    ArrayList<Flowers> flowersList = new ArrayList<Flowers>();

    String url ="http://113.193.30.155/MobileService/MobileService.asmx/GetSampleData";

    @Override
    public android.view.View onCreateView(LayoutInflater inflater, ViewGroup container,
                                          Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tab2, container, false);

        FlowerAdapter adapter=new FlowerAdapter(getActivity().getApplicationContext(),R.layout.flower_list_xml,flowersList);
        ListView listView=(ListView)rootView.findViewById(R.id.listView);
        listView.setAdapter(adapter);

        return rootView;
    }
    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        Button b = (Button)getView().findViewById(R.id.button);

        b.setOnClickListener( new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                new BackTask().execute(url);

            }

        });

    }

//我的异步任务从这里开始

 public class BackTask extends AsyncTask<String, Void, String> {

        @Override
        protected void onPreExecute(){
            super.onPreExecute();
        }
        @Override
        protected String doInBackground(String... strings) {
            String result = null;
            BufferedReader reader = null;
            try {
                URL url = new URL(strings[0]);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                StringBuilder sb = new StringBuilder();
                reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
                Log.d("testhtt2", "test");
                String line;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                Log.d("test44", sb.toString());
                return sb.toString();

            } catch (Exception e) {
                e.printStackTrace();
                return null;

            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                        return null;

                    }
                }

                return result;
            }
        }
  @Override
        protected void onPostExecute(String s){
            try {
                JSONArray ar =new JSONArray(s);
                for (int i = 0; i < ar.length(); i++){
                    JSONObject jsonObject=ar.getJSONObject(i);
                    Flowers flowers= new Flowers();
                    flowers.setName(jsonObject.getString("NAME"));
                    flowersList.add(flowers);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

最佳答案

您在 doInBackground 中返回 null,然后尝试在 OnPostExecute 中将其解析为 JSONArray。从 doInBackground 方法返回正确的字符串,看看是否有帮助。

关于java - 具有异步任务的 fragment 中的 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46296864/

相关文章:

java - JPA EntityManager 是否有无状态版本?

Javascript 和 CSS 移动友好全屏覆盖

java - Android自定义 View 更新 View 的指定部分

javascript - Angular 2日期管

Java 正则表达式为每个对象分割 JSON 字符串

json - Cocoa - 在 null 上传递 JSON 崩溃

java - 初级 Java - 循环数组

java - JSoup爬行如何从相同标签但两个项目爬行

java - 为什么将 Autocommit 设置为 true?

java - 当文本有条件时,在编辑文本中输入的文本在较新的 Android 版本上消失