Java 未连接适配器,跳过片段中包含reyclerview和json的布局
我确信json的一切都很好,但我认为我并没有把Java 未连接适配器,跳过片段中包含reyclerview和json的布局,java,android,json,android-fragments,android-adapter,Java,Android,Json,Android Fragments,Android Adapter,我确信json的一切都很好,但我认为我并没有把setAdapter()放在好的位置。所以我在这里犯了个错误?或者我在别的地方犯了个错误。任何帮助都将不胜感激。 代码如下: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.gifts_activity,
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();
}
}
@覆盖
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图v=充气机。充气(R.layout.U活动,容器,错误);
dbh=newdbhelper(getActivity());
avLoadingIndicatorView=(avLoadingIndicatorView)
v、 findViewById(R.id.AvLoadingIndicator视图);
recyclerView=(recyclerView)v.findViewById(R.id.recycler\u视图);
addItemDecoration(新的SimpleDividerItemDecoration(getActivity().getResources());
recyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(getActivity());
setItemAnimator(新的DefaultItemAnimator());
giftItemSorter=新的giftItemSorter();
int birthdayId=getActivity().getIntent().getIntExtra(EditBirthday.KEY\u EXTRA\u BIRTHDAY\u ID,0);
游标rs=dbh.getBirthdayId(birthdayId);
rs.moveToFirst();
新建AsyncHttpTask().execute(url);
如果(!rs.isClosed()){
rs.close();}
返回v;
}
void startAnim(){
avLoadingIndicatorView.setVisibility(视图.可见);
}
void stopAnim(){
avLoadingIndicatorView.setVisibility(View.GONE);
}
公共类AsyncHttpTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
斯塔塔尼姆();
}
@凌驾
受保护的整数doInBackground(字符串…参数){
整数结果=0;
HttpURLConnection-urlConnection;
试一试{
URL=新URL(参数[0]);
urlConnection=(HttpURLConnection)url.openConnection();
int statusCode=urlConnection.getResponseCode();
//200表示HTTP Ok
如果(状态代码==200){
BufferedReader r=新的BufferedReader(新的InputStreamReader(urlConnection.getInputStream());
StringBuilder响应=新建StringBuilder();
弦线;
而((line=r.readLine())!=null){
响应。追加(行);
}
parseResult(response.toString());
结果=1;//成功
}否则{
结果=0;//“无法获取数据!”;
}
}捕获(例外e){
Log.d(标记,例如getLocalizedMessage());
}
返回结果;//“无法获取数据!”;
}
@凌驾
受保护的void onPostExecute(整数结果){
//下载完成。让我们更新用户界面
stopAnim();
如果(结果==1){
giftListAdapter=新的giftListAdapter(getActivity(),gives);
设置适配器(giftListAdapter);
}否则{
创建(getActivity(),getString(R.string.err\u msg\u no\u internet),
supertoos.Duration.SHORT,Style.getStyle(Style.RED,supertoos.Animations.FLYIN)).show();
}
}
}
私有void parseResult(字符串结果){
试一试{
JSONObject响应=新JSONObject(结果);
JSONArray movies=response.optJSONArray(“movies”);
礼品=新的ArrayList();
对于(int i=0;i
您的片段视图是在onCreateView
方法中创建的,因为在创建视图的过程中,您没有在RecyclerView
上设置适配器,所以会出现红色错误行:未连接适配器,跳过布局
尝试将适配器设置为onCreateView
方法中的RecyclerView
:传入空的礼品数组:
// Supposing that you declared the gifts arraylist as a member variable
gifts = new ArrayList<>();
giftListAdapter = new GiftListAdapter(getActivity(), gifts);
reyclerView.setAdapter(giftListAdapter);
//假设您将gifts arraylist声明为成员变量
礼品=新的ArrayList();
giftListAdapter=新的giftListAdapter(getActivity(),gives);
设置适配器(giftListAdapter);
我应该在onCreateView
方法中设置then adapter吗?就是这样。谢谢我还有一个从数据库获取数据并加载到recyclerView的问题。我不想再问另一个问题,因为stackoverflow不喜欢你一天做两次或更多。你有时间帮我解决这个问题吗?@DusanDimitrijevic对不起,我不能,我的老师现在正疯狂地看着我。只要再贴一个问题,SO社区会很有帮助的。