0

I am making a custom adapter in card view which loads data from a locally saved json file. I am able to fetch the data but the view is not being inflated and I keep on getting this error:

    E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.visan.pulse, PID: 1630
    Theme: themes:{default=overlay:com.meow.os, iconPack:system, fontPkg:com.your.zappy.markui, com.android.systemui=overlay:system, com.android.systemui.navbar=overlay:system}
    android.view.InflateException: Binary XML file line #30: Binary XML file line #30: Error inflating class <unknown>
    at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    at com.example.visan.pulse.CardAdapter.onCreateViewHolder(CardAdapter.java:25)
    at com.example.visan.pulse.CardAdapter.onCreateViewHolder(CardAdapter.java:12)
    at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5288)
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4551)
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4461)
    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1962)
    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1371)
    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1334)
    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:563)
    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2847)
    at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3145)
    at android.view.View.layout(View.java:16639)
    at android.view.ViewGroup.layout(ViewGroup.java:5437)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1735)
    at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1724)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1490)
    at android.view.View.layout(View.java:16639)
    at android.view.ViewGroup.layout(ViewGroup.java:5437)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
    at android.view.View.layout(View.java:16639)
    at android.view.ViewGroup.layout(ViewGroup.java:5437)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1735)
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1579)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1488)
    at android.view.View.layout(View.java:16639)
    at android.view.ViewGroup.layout(ViewGroup.java:5437)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
    com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2934)
    at android.view.View.layout(View.java:16639)
    at android.view.ViewGroup.layout(ViewGroup.java:5437)
    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2179)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1939)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1115)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6023)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
    at android.view.Choreographer.doCallbacks(Choreographer.java:670)
    at android.view.Choreographer.doFrame(Choreographer.java:606)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5461)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    Caused by: android.view.InflateException: Binary XML file line #30: Error inflating class <unknown>
    at android.view.LayoutInflater.createView(LayoutInflater.java:645)
    at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:694)

My Custom Adapter class:

package com.example.visan.pulse;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder>{
    private List<Data> dataSet;
    private Context context;

public CardAdapter(List<Data> dataSet, Context context){
    super();
    this.dataSet=dataSet;
    this.context=context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.card_layout, parent, false);
    ViewHolder viewHolder=new ViewHolder(v);
    return viewHolder;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Data data=dataSet.get(position);
    holder.event.setText(data.getName());
    holder.venue.setText(data.getVenue());
    holder.time.setText(data.getTime());
    holder.notify.setImageResource(R.drawable.ic_action_bell);
    holder.main.setImageResource(R.drawable.image_16);
}

@Override
public int getItemCount() {
    return dataSet.size();
}

public class ViewHolder extends RecyclerView.ViewHolder{
    public TextView event,venue,time;
    public ImageView main,notify;

    public ViewHolder(View itemView){
        super(itemView);
        main=(ImageView) itemView.findViewById(R.id.card_image);
        notify=(ImageView) itemView.findViewById(R.id.imageView_notify);
        event=(TextView) itemView.findViewById(R.id.textView_event);
        venue=(TextView) itemView.findViewById(R.id.textView_venue);
        time=(TextView) itemView.findViewById(R.id.textView_time);
    }
}
}

My xml file for card View:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_gravity="center"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardCornerRadius="4dp"
    card_view:cardElevation="10dp">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:id="@+id/card_image"
        android:src="@drawable/image_16"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="?android:textAppearanceLarge"
                android:id="@+id/textView_event"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="?android:textAppearanceSmall"
                android:id="@+id/textView_time"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="?android:textAppearanceSmall"
                android:id="@+id/textView_venue"/>
        </LinearLayout>
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView_notify"
            android:contentDescription="@string/app_name"/>
    </LinearLayout>

</android.support.v7.widget.CardView>

</RelativeLayout>

My main activity class:

package com.example.visan.pulse;

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Main2Activity extends Activity {
private List<Data> listData;

private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private RecyclerView.Adapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle extras=getIntent().getExtras();
    int data=extras.getInt("INDEX");
    setContentView(R.layout.activity_main2);

    recyclerView=(RecyclerView) findViewById(R.id.RecyclerView);
    recyclerView.setHasFixedSize(true);
    layoutManager=new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

    listData=new ArrayList<>();

    try{
        JSONObject jsonObject=new JSONObject(loadJSON());
        Log.v("data",String.valueOf(data));
        JSONObject jsonObjectdata=jsonObject.getJSONObject(String.valueOf(data));

        for (int i=0;i<jsonObjectdata.length();i++){
            JSONArray jsonArray=jsonObjectdata.getJSONArray(String.valueOf(i));
            Data newData=new Data();
            newData.setName(jsonArray.getString(0));
            newData.setTime(jsonArray.getString(1));
            newData.setVenue(jsonArray.getString(2));
            newData.setDept(jsonArray.getString(3));
            listData.add(newData);
            Log.v("data", jsonArray.getString(0));
        }
    }catch (JSONException e){
        e.printStackTrace();
    }

    adapter=new CardAdapter(listData,this);
    recyclerView.setAdapter(adapter);
}

public String loadJSON(){
    StringBuilder stringBuilder=new StringBuilder();
    try {
        InputStream inputStream=getResources().openRawResource(R.raw.data);
        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));

        String line;
        while ((line=bufferedReader.readLine())!=null){
            stringBuilder.append(line);
            Log.v("abc",line);
        }

        bufferedReader.close();
    }catch (IOException e){
        e.printStackTrace();
    }
    return stringBuilder.toString();
}
}

My main activity xml file:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.visan.pulse.Main2Activity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/RecyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </android.support.v7.widget.RecyclerView>

</LinearLayout>
dex
  • 5,182
  • 1
  • 23
  • 41
Vishal Anand
  • 55
  • 1
  • 7
  • 1
    Your stack trace is cut off. Please edit your question and provide the complete stack trace, as the information that would help us identify the problem is in the missing portion. – CommonsWare Sep 05 '16 at 19:31

1 Answers1

1

Text appearance attribute shouldn't be applied to android:textSize. Do this:

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:textAppearanceLarge"
            android:id="@+id/textView_event"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:textAppearanceSmall"
            android:id="@+id/textView_time"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:textAppearanceSmall"
            android:id="@+id/textView_venue"/>
Shaishav
  • 5,282
  • 2
  • 22
  • 41