我确定 json 一切正常,但我认为我没有将 setAdapter()
放在合适的位置。那么我在哪里犯错了?或者我在其他地方犯了一个错误。任何帮助,将不胜感激。
这是代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.gifts_activity, container, false);
dbh = new DBHelper(getActivity());
avLoadingIndicatorView = (AVLoadingIndicatorView)
v.findViewById(R.id.avloadingIndicatorView);
recyclerView = (RecyclerView) v.findViewById(R.id.recycler_view);
recyclerView.addItemDecoration(new SimpleDividerItemDecoration(getActivity().getResources()));
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setItemAnimator(new DefaultItemAnimator());
giftItemSorter = new GiftItemSorter();
int birthdayId = getActivity().getIntent().getIntExtra(EditBirthday.KEY_EXTRA_BIRTHDAY_ID, 0);
Cursor rs = dbh.getBirthdayId(birthdayId);
rs.moveToFirst();
new AsyncHttpTask().execute(url);
if (!rs.isClosed()) {
rs.close();}
return v;
}
void startAnim(){
avLoadingIndicatorView.setVisibility(View.VISIBLE);
}
void stopAnim(){
avLoadingIndicatorView.setVisibility(View.GONE);
}
public class AsyncHttpTask extends AsyncTask<String, Void, Integer> {
@Override
protected void onPreExecute() {
startAnim();
}
@Override
protected Integer doInBackground(String... params) {
Integer result = 0;
HttpURLConnection urlConnection;
try {
URL url = new URL(params[0]);
urlConnection = (HttpURLConnection) url.openConnection();
int statusCode = urlConnection.getResponseCode();
// 200 represents HTTP Ok
if (statusCode == 200) {
BufferedReader r = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
StringBuilder response = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
response.append(line);
}
parseResult(response.toString());
result = 1; // Successful
} else {
result = 0; //"Failed to fetch data!";
}
} catch (Exception e) {
Log.d(TAG, e.getLocalizedMessage());
}
return result; //"Failed to fetch data!";
}
@Override
protected void onPostExecute(Integer result) {
// Download complete. Let us update UI
stopAnim();
if (result == 1) {
giftListAdapter = new GiftListAdapter(getActivity(), gifts);
reyclerView.setAdapter(giftListAdapter);
} else {
SuperActivityToast.create(getActivity(), getString(R.string.err_msg_no_internet),
SuperToast.Duration.SHORT, Style.getStyle(Style.RED, SuperToast.Animations.FLYIN)).show();
}
}
}
private void parseResult(String result) {
try {
JSONObject response = new JSONObject(result);
JSONArray movies = response.optJSONArray("movies");
gifts = new ArrayList<>();
for (int i = 0; i < movies.length(); i++) {
JSONObject post = movies.optJSONObject(i);
GiftItem item = new GiftItem();
item.setThumbnail(post.optString("image"));
item.setTitle(post.optString("title"));
item.setDescription(post.optString("description"));
item.setSource(getString(R.string.source) + " " + post.optString("source"));
item.setTotalRating(post.optInt("rating"));
item.setPrice(post.optDouble("price"));
gifts.add(item);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
最佳答案
您的 fragment View 是在 onCreateView
方法中创建的,并且由于您在 View 创建期间没有在 RecyclerView
上设置适配器,所以您会看到红色错误行: 没有附加适配器,跳过布局。
尝试在 onCreateView
方法中为 RecyclerView
设置一个适配器:传入一个空的 gifts 数组:
// Supposing that you declared the gifts arraylist as a member variable
gifts = new ArrayList<>();
giftListAdapter = new GiftListAdapter(getActivity(), gifts);
reyclerView.setAdapter(giftListAdapter);
关于java - 没有附加适配器,在 fragment 中使用 reyclerview 和 json 跳过布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34181205/