Search code examples
androidandroid-layoutandroid-fragmentsandroid-adapterandroid-inflate

Android Fragments Layout View Error


I am trying to merge two project that I have. The first is an swipe down to refresh and the second include Tabs and Navigation Drawer. But I have a problem that is the Adapter of the swipe to refresh is need Activity and the Tabs project inflate a View. I tried to Check on Google but the Application Doesn't Run. To convert the View to the Activity but it also doesn't work. Another problem that may appear that I am using a progress dialog and it's need the Application Context which I don't know how to retrieve it from the View.

If Anyone Can help me please this is my code:

this is the Fragment in the Tab that I want the swipe to refresh to run inside it:

package Fragments;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.Toast;

import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.subhi.tabhost.Adapter;
import com.subhi.tabhost.AppController;
import com.subhi.tabhost.Item;
import com.subhi.tabhost.R;

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

import java.util.ArrayList;
import java.util.List;

/**
 * Created by subhi on 2/9/2016.
 */
public class NewsFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener{


    private static final String url = "http://192.168.1.106/listview/xx.php";
    private ProgressDialog dialog;
    private List<Item> array = new ArrayList<Item>();
    private ListView listView;
    private Adapter adapter;

    public SwipeRefreshLayout mSwipeRefreshLayout;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        final View v=inflater.inflate(R.layout.news_fragment_layout,container,false);

        mSwipeRefreshLayout = (SwipeRefreshLayout)v.findViewById(R.id.swipe_refresh_layout);

        listView = (ListView)v.findViewById(R.id.list_item);

        Activity host= (Activity) v.getContext();
        v.isFocused();
        adapter=new Adapter(host,array);
        listView.setAdapter(adapter);

        //  mSwipeRefreshLayout.setRefreshing(false);

        dialog=new ProgressDialog(getContext());
        dialog.setMessage("Loading...");
        dialog.show();



        mSwipeRefreshLayout.setOnRefreshListener(this);

        mSwipeRefreshLayout.post(new Runnable() {
                                     @Override
                                     public void run() {

                                         mSwipeRefreshLayout.setRefreshing(true);

                                         refreshcontent(v.getContext());
                                     }
                                 }
        );
        return v;


    }




    public  void refreshcontent(final Context v)
    {

        mSwipeRefreshLayout.setRefreshing(true);
        JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                hideDialog();
                //parsing json

                if(response.length()>0) {
                    for (int i = 0; i < response.length(); i++) {
                        try {
                            JSONObject obj = response.getJSONObject(i);
                            Item item = new Item();
                            item.setTitle(obj.getString("title"));
                            item.setImage(obj.getString("image"));
                            item.setRate(obj.getDouble("rating"));
                            item.setYear(obj.getInt("releaseYear"));

                        /*//genre is json array
                        /JSONArray genreArray=obj.getJSONArray("genre");
                        ArrayList<String> genre=new ArrayList<String>();
                        for(int j=0;j<genreArray.length();j++){
                            genre.add((String) genreArray.get(j));
                        }
                        item.setGenre(genre);*/

                            //add to array
                            array.add(0,item);
                        } catch (JSONException ex) {
                            ex.printStackTrace();
                        }
                    }
                    adapter.notifyDataSetChanged();



                }
                mSwipeRefreshLayout.setRefreshing(false);


            }


        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                //Log.e(TAG, "Server Error: " + error.getMessage());

                Toast.makeText(v.getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();

                // stopping swipe refresh
                mSwipeRefreshLayout.setRefreshing(false);

            }


        }


        );

        //mSwipeRefreshLayout.setRefreshing(false);


        AppController.getmInstance().addToRequesQueue(jsonArrayRequest);


    }

    public void hideDialog(){
        if(dialog !=null){
            dialog.dismiss();
            dialog=null;
        }
    }

    @Override
    public void onRefresh() {

        refreshcontent();

    }

}

And this is Adapter for The Swipe to Refresh :

package com.subhi.tabhost;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;

import java.util.List;

/**
 * Created by tb_laota on 9/21/2015.
 */
public class Adapter extends BaseAdapter{
    private LayoutInflater inflater;
    private Activity activity;
    private List<Item> items;
    ImageLoader imageLoader=AppController.getmInstance().getmImageLoader();
    public Adapter(Activity activity,List<Item> items){
        this.activity=activity;
        this.items=items;
    }
    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Object getItem(int position) {
        return items.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(inflater==null){
            inflater=(LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
        if(convertView ==null){
            convertView=inflater.inflate(R.layout.custom_layout,null);
        }
        if(imageLoader==null)
            imageLoader=AppController.getmInstance().getmImageLoader();
            NetworkImageView imageView= (NetworkImageView) convertView.findViewById(R.id.image_view);
            TextView title= (TextView) convertView.findViewById(R.id.tv_title);
            TextView rate= (TextView) convertView.findViewById(R.id.tv_rate);
            TextView genre= (TextView) convertView.findViewById(R.id.tv_genre);
            TextView year= (TextView) convertView.findViewById(R.id.tv_year);
            //getting data for row

            Item item=items.get(position);
            imageView.setImageUrl(item.getImage(), imageLoader);
            //title
            title.setText(item.getTitle());
            //rate
            rate.setText(String.valueOf(item.getRate()));
            //String genreStr="";

            //year
            year.setText(String.valueOf(item.getYear()));

        return convertView;
    }
}

Also This is the Log Cat:

02-16 06:14:48.165 1950-1950/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                 Process: com.subhi.tabhost, PID: 1950
                                                 java.lang.NullPointerException
                                                     at com.subhi.tabhost.Adapter.<init>(Adapter.java:23)
                                                     at Fragments.NewsFragment.onCreateView(NewsFragment.java:58)
                                                     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
                                                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
                                                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
                                                     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
                                                     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
                                                     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
                                                     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
                                                     at android.support.v4.view.ViewPager.populate(ViewPager.java:1106)
                                                     at android.support.v4.view.ViewPager.populate(ViewPager.java:952)
                                                     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1474)
                                                     at android.view.View.measure(View.java:16497)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                                                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                                                     at android.view.View.measure(View.java:16497)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                                                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
                                                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
                                                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
                                                     at android.view.View.measure(View.java:16497)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                                                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                                                     at android.view.View.measure(View.java:16497)
                                                     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
                                                     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
                                                     at android.view.View.measure(View.java:16497)
                                                     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
                                                     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
                                                     at android.view.View.measure(View.java:16497)
                                                     at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:940)
                                                     at android.view.View.measure(View.java:16497)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                                                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                                                     at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
                                                     at android.view.View.measure(View.java:16497)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                                                     at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391)
                                                     at android.view.View.measure(View.java:16497)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                                                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                                                     at android.view.View.measure(View.java:16497)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                                                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
                                                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
                                                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
                                                     at android.view.View.measure(View.java:16497)
                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                                                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                                                     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
                                                     at android.view.View.measure(View.java:16497)
                                                     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1912)
                                                     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109)
                                                     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291)
                                                     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
                                                     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
                                                     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
                                                     at android.view.Choreographer.doCallbacks(Choreographer.java:574)
                                                    at and
02-16 06:14:48.169 1950-1953/? D/dalvikvm: GC_CONCURRENT freed 243K, 8% free 4713K/5080K, paused 2ms+0ms, total 5ms
02-16 06:14:48.293 518-803/? W/ActivityManager:   Force finishing activity com.subhi.tabhost/.MainActivity
02-16 06:14:48.633 518-803/? D/dalvikvm: GC_FOR_ALLOC freed 895K, 26% free 8529K/11444K, paused 6ms, total 6ms
02-16 06:14:48.641 518-533/? D/dalvikvm: GC_FOR_ALLOC freed 32K, 22% free 9000K/11444K, paused 9ms, total 9ms
02-16 06:14:48.645 518-533/? I/dalvikvm-heap: Grow heap (frag case) to 9.986MB for 1127532-byte allocation
02-16 06:14:48.657 518-532/? D/dalvikvm: GC_FOR_ALLOC freed <1K, 20% free 10100K/12548K, paused 9ms, total 9ms

and if there is any needed Data I will Edit my question.


Solution

  • Thanks Everyone, The Error Was that i am using an class extends Application and i didn't put name of the Class in manifest file..