gpt4 book ai didi

java - 在 onCreateView 中执行 AsyncTask 第一次尝试时不显示信息

转载 作者:行者123 更新时间:2023-12-02 03:51:41 31 4
gpt4 key购买 nike

我正在 Android 上创建一个菜谱应用程序。用户可以将食谱添加到他的 Collection 夹列表(我通过网络服务将其存储在我的数据库中),并且他应该能够查看包含他 Collection 的食谱的 Collection 夹列表。

我使用 AsyncTask 从数据库中获取所有食谱,这使用 SharedPreferences 来跟踪用户名,该用户名作为参数传递给我的网络服务以获取该用户名的食谱。

Collection 夹页面是通过 NavigationDrawer 的一个选项,单击后应执行 AsyncTask 并立即使用菜谱信息填充 Collection 夹列表。但是,当我第一次访问 Collection 夹页面时,我从终端得到成功返回,但页面是空白的。当我第二次尝试访问 Collection 夹列表时,页面成功加载了食谱信息。我尝试了许多不同的组合,例如在填充 Fragment 之前执行任务,尝试在 NavigationDrawerItem 单击上执行它,但这给了我一个错误。

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

第一次尝试

enter image description here

第二次尝试

enter image description here

Favorites.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;
}

显示最爱

  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();

}

}

我做错了什么?

注意我知道我可能会因为糟糕的编码标准而被宰,但我稍后会解决它!

最佳答案

我认为您可能需要在 onPostExecute 中使用lazyFavsAdapter.notifyDataSetChanged()。

关于java - 在 onCreateView 中执行 AsyncTask 第一次尝试时不显示信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35832707/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com