在onCreateView中执行AsyncTask不会显示第一次尝试的信息

时间:2016-03-06 21:17:25

标签: java android android-asynctask

我正在Android上创建配方应用。用户可以将食谱添加到他的收藏夹列表(我通过webservices存储在我的数据库中),他应该能够使用他喜欢的食谱查看收藏夹列表。

我使用AsyncTask从数据库中获取所有配方,这使用SharedPreferences来跟踪用户名,该用户名作为参数传递给我的webservices以获取该用户名的配方。

收藏夹页面是一个通过NavigationDrawer的选项,一旦点击它就应该执行AsyncTask并立即用收藏夹信息填充收藏夹列表。但是当我第一次访问收藏页面时,我从终端返回成功,但页面是空白的。当我在第二次尝试时访问收藏夹列表时,页面成功加载了配方信息。我尝试了很多不同的组合,比如在膨胀片段之前执行任务,尝试在NavigationDrawerItem上执行它,但是这给了我一个错误。

如何在第一次尝试时显示?我相信我错过了一些如此明显的东西,但我看不到它!

第一次尝试

enter image description here

第二次尝试

enter image description here

Favourites.java

public static Favourites newInstance(int sectionNumber) {
        Favourites fragment = new Favourites();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }


@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        session = new SessionManager(getActivity());

        if(!session.isLoggedIn()){
            FragmentManager fm = getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.replace(R.id.container, new Login());
            ft.commit();
        }

        new DisplayFavourite().execute();

        View rootView = inflater.inflate(R.layout.fragment_favs, container, false);
        setHasOptionsMenu(true);

        final ListView myListView = (ListView) rootView.findViewById(R.id.favouritesView);
        lazyFavsAdapter = new LazyFavsAdapter(getActivity(),Favourites.pairs);
        myListView.setAdapter(lazyFavsAdapter);

        return rootView;
    }

DisplayFavourite

  class DisplayFavourite extends AsyncTask<String, String, String> {

    private String user_id;
    private ProgressDialog pDialog;

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(getActivity());
        pDialog.setMessage("Retrieving Favourites...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();

        user_id = session.getID();

    }

    /**
     * Fetching Favourited recipes
     * */
    protected String doInBackground(String... args) {

        // Building Parameters
        HashMap<String, String> params = new HashMap<>();
        params.put("user_id", user_id);

        // getting JSON Object
        JSONObject json = jsonParser.makeHttpRequest("MyWebsiteURL",
                "POST", params);

        // check for success tag
        try {
            JSONArray array  = json.getJSONArray("results");
            //Log.d("Create Response", json.toString());

            if (pairs.size()>0){
                pairs.clear();
            }

            if (array.length() > 0) {

                for (int i = 0; i<array.length(); i++){
                    set = new HashMap<>();
                    JSONObject jo = array.getJSONObject(i);
                    image = jo.getString(TAG_IMAGE);
                    name = jo.getString(TAG_NAME);
                    recipe_id = jo.getString(TAG_ID);
                    rating = jo.getString(TAG_RATING);
                    source = jo.getString(TAG_SOURCE);

                    set.put("image", image);
                    set.put("name", name);
                    set.put("recipe_id", recipe_id);
                    set.put("rating", rating);
                    set.put("source", source);
                    pairs.add(set);

                }

            } else {
        //      Log.d("Failure!",json.getString(TAG_MESSAGE));
        //      return json.getString(TAG_MESSAGE);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog once done
        pDialog.dismiss();

        //print recipes to terminal
        for(int j =0; j<pairs.size(); j++) {
            System.out.println(pairs.get(j));

        }
    }

}

LazyFavsAdapter.java

public class LazyFavsAdapter extends BaseAdapter{

private Activity activity;
private ArrayList data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader;

public LazyFavsAdapter(Activity a, ArrayList d) {
    activity = a;
    data=d;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    imageLoader=new ImageLoader(activity.getApplicationContext());
}

public int getCount() {
    return data.size();
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.list_item, null);

    TextView nameText=(TextView)vi.findViewById(R.id.recipe_name);
    nameText.setText(Favourites.pairs.get(position).get("name"));

    TextView sourceText=(TextView)vi.findViewById(R.id.source);
    sourceText.setText(Favourites.pairs.get(position).get("source"));

    RatingBar ratingBar =(RatingBar)vi.findViewById(R.id.ratingBar);
    ratingBar.setRating(Float.parseFloat(Favourites.pairs.get(position).get("rating")));

    ImageView image=(ImageView)vi.findViewById(R.id.recipe_pic);
    imageLoader.DisplayImage(Favourites.pairs.get(position).get("image"), image);
    return vi;

    }
}

MainPage.java

@Override
    public void onNavigationDrawerItemSelected(int position) {
        // update the main content by replacing fragments
        FragmentManager fragmentManager = getSupportFragmentManager();
        if (position == 0) {
            fragmentManager.beginTransaction()
                    .replace(R.id.container, PlaceholderFragment.newInstance(1))
                    .commit();

        } else if (position == 1) {
            fragmentManager.beginTransaction()
                    .replace(R.id.container, Search.newInstance(2))
                    .commit();

        }

        else if (position == 2) {
            fragmentManager.beginTransaction()
                    .replace(R.id.container, Favourites.newInstance(3))
                    .commit();
        }

        else if (position == 3) {
            fragmentManager.beginTransaction()
                    .replace(R.id.container, AccountManagement.newInstance(4))
                    .commit();

        }

    }

我做错了什么?

N.B。我知道我可能因为编码标准差而被屠杀,但我会稍后解决它!

1 个答案:

答案 0 :(得分:2)

我认为你的onPostExecute可能需要一个lazyFavsAdapter.notifyDataSetChanged()。