TransactionTooLargeException в Activity на более новых версиях Android

Моя активность вызывает исключение TransactionTooLargeException, из-за которого происходит сбой моего приложения. Я не могу понять, где и почему это происходит, и поэтому я не могу найти быстрое решение. Пожалуйста, помогите мне. Вот мой код:

public class ProjectList extends AppCompatActivity implements RecyclerView.OnItemTouchListener {

    String SCREEN_NAME="Project List";
    private Tracker mTracker;

    private GoogleApiClient mClient;
    private Uri mUrl;
    private String mTitle;
    private String mDescription;

    private List<ProjectGetSet> persons;
    private RecyclerView rv;
    public static final String PREFS_NAME = "PREF";

    SharedPreferences settings;
    SharedPreferences.Editor editor;
    DatabaseHandler databaseHandler;
    TLAPI tlapi;
    TLConstants tlConstants;
    private boolean loading = true;
    int pastVisiblesItems, visibleItemCount, totalItemCount;
    LinearLayoutManager llm;
    int pageNumber=1;
    String id;
    TextView tvMessage,tvFilterMsg;
    Button btnBrowse;
    private SwipeRefreshLayout swipeContainer;
    TextView tvLatest, tvPopular, tvBudget,tvEnding,tvFeatured;
    String sort="";
    String q = "";
    ImageButton btnSearch;
    EditText etSearch;

    public ProjectList()
    {

    }

    private OnItemClickListener mListener;

    public interface OnItemClickListener {
        public void onItemClick(View view, int position);
    }

    GestureDetector mGestureDetector;

    public ProjectList(Context context, OnItemClickListener listener) {
        mListener = listener;
        mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }
        });
    }

    @Override
    public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
        View childView = view.findChildViewUnder(e.getX(), e.getY());
        if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
            mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
        }
        return false;
    }

    @Override
    public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
    }


    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);


        AppIndexConstants appIndexConstants=new AppIndexConstants();
        mClient = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
        mUrl = appIndexConstants.jobList;
        mTitle = appIndexConstants.joblistTitle;
        mDescription = appIndexConstants.joblistDescription;

        setContentView(R.layout.activity_find_project);



        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        rv = (RecyclerView)findViewById(R.id.rv);
        etSearch = (EditText) findViewById(R.id.etSearch);

        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle("Find Jobs");

        etSearch.clearFocus();

        tlapi=new TLAPI(getApplicationContext());
        tlConstants=new TLConstants(getApplicationContext());
        settings=getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
        editor = settings.edit();

        onNewIntent(getIntent());

        databaseHandler=new DatabaseHandler(getApplicationContext());
        if(databaseHandler.getRowCountLoginAuth()<=0) {

            Toast.makeText(getApplicationContext(),"Please login",Toast.LENGTH_LONG).show();
            Intent intent;
            intent = new Intent(getApplicationContext(), WalkThrough.class);
            startActivity(intent);
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
        rv.setHasFixedSize(true);
        llm = new LinearLayoutManager(getApplicationContext());
        rv.setLayoutManager(llm);

        tvLatest=(TextView)findViewById(R.id.tvLatest);
        tvPopular=(TextView)findViewById(R.id.tvPopular);
        tvBudget=(TextView)findViewById(R.id.tvBudget);
        btnSearch = (ImageButton) findViewById(R.id.btnSearch);
        tvEnding=(TextView)findViewById(R.id.tvEnding);
        tvFeatured=(TextView)findViewById(R.id.tvFeatured);
        tvMessage=(TextView)findViewById(R.id.tvMessage);
        tvFilterMsg=(TextView)findViewById(R.id.tvFilterMsg);
        swipeContainer = (SwipeRefreshLayout) findViewById(R.id.swipeContainer);
        btnBrowse=(Button)findViewById(R.id.btnBrowse);

        etSearch.setText("");

        AnalyticsApplication application = (AnalyticsApplication) getApplication();
        mTracker = application.getDefaultTracker();
        Log.i("ANALYTICS", "Setting screen name: " + SCREEN_NAME);
        mTracker.setScreenName("Screen~" + SCREEN_NAME);
        mTracker.send(new HitBuilders.ScreenViewBuilder().build());
        GoogleAnalytics.getInstance(this).dispatchLocalHits();

        mTracker.send(new HitBuilders.EventBuilder()
                .setCategory("find_jobs")
                .setAction("viewed")
                .build());



        editor.putString("shortlisted", "0");
        editor.putString("show", "all");
        editor.putString("sort", "");
        editor.putString("dontshowreject", "1");
        if(settings.getString("currency","").equalsIgnoreCase("INR")) {
            editor.putString("proposalFilterMinVal", "0");
            editor.putString("projectFilterMaxVal", "300000");
        }
        else
        {
            editor.putString("proposalFilterMinVal", "0");
            editor.putString("projectFilterMaxVal", "5000");
        }
        editor.putString("proposalFilterMaxValRating","5");
        editor.putString("proposalFilterMinValRating", "0");
        editor.putString("filterAppliedProposal", "");
        editor.putString("projectFilterSubCategory","");
        editor.putString("selectedCategoryID","");
        editor.apply();



        if(settings.getString("filterApplied","").equalsIgnoreCase("1"))
        {
            tvFilterMsg.setVisibility(View.VISIBLE);

        }
        else
        {
            tvFilterMsg.setVisibility(View.GONE);
        }

        btnSearch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (etSearch.getText().length() > 0) {

                    editor.putString("filterApplied","1");
                    editor.apply();

                    q = etSearch.getText().toString();

                    initializeData();
                    initializeAdapter();
                }
            }
        });

        tvPopular.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mTracker.send(new HitBuilders.EventBuilder()
                        .setCategory("find_jobs")
                        .setLabel("popular")
                        .setAction("viewed")
                        .build());


                tvLatest.setTextColor(getResources().getColor(R.color.grey_400));
                tvBudget.setTextColor(getResources().getColor(R.color.grey_400));
                tvEnding.setTextColor(getResources().getColor(R.color.grey_400));
                tvFeatured.setTextColor(getResources().getColor(R.color.grey_400));
                tvPopular.setTextColor(getResources().getColor(R.color.white));


                sort = "popular";

                initializeData();
                initializeAdapter();
            }
        });

        tvBudget.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mTracker.send(new HitBuilders.EventBuilder()
                        .setCategory("find_jobs")
                        .setLabel("desc")
                        .setAction("viewed")
                        .build());


                tvLatest.setTextColor(getResources().getColor(R.color.grey_400));
                tvBudget.setTextColor(getResources().getColor(R.color.white));
                tvEnding.setTextColor(getResources().getColor(R.color.grey_400));
                tvFeatured.setTextColor(getResources().getColor(R.color.grey_400));
                tvPopular.setTextColor(getResources().getColor(R.color.grey_400));

                sort="desc";

                initializeData();
                initializeAdapter();
            }
        });

        tvFeatured.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mTracker.send(new HitBuilders.EventBuilder()
                        .setCategory("find_jobs")
                        .setLabel("desc")
                        .setAction("viewed")
                        .build());


                tvLatest.setTextColor(getResources().getColor(R.color.grey_400));
                tvPopular.setTextColor(getResources().getColor(R.color.grey_400));
                tvBudget.setTextColor(getResources().getColor(R.color.grey_400));
                tvEnding.setTextColor(getResources().getColor(R.color.grey_400));
                tvFeatured.setTextColor(getResources().getColor(R.color.white));

                sort="featured";

                initializeData();
                initializeAdapter();
            }
        });

        tvEnding.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mTracker.send(new HitBuilders.EventBuilder()
                        .setCategory("find_jobs")
                        .setLabel("desc")
                        .setAction("viewed")
                        .build());


                tvLatest.setTextColor(getResources().getColor(R.color.grey_400));
                tvPopular.setTextColor(getResources().getColor(R.color.grey_400));
                tvBudget.setTextColor(getResources().getColor(R.color.grey_400));
                tvEnding.setTextColor(getResources().getColor(R.color.white));
                tvFeatured.setTextColor(getResources().getColor(R.color.grey_400));

                sort="ending";

                initializeData();
                initializeAdapter();
            }
        });


        btnBrowse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                btnBrowse.setVisibility(View.GONE);
                tvMessage.setVisibility(View.GONE);
                swipeContainer.setVisibility(View.VISIBLE);


                editor.putString("projectFilterSkills", "");
                if(settings.getString("currency","").equalsIgnoreCase("INR")) {
                    editor.putString("projectFilterMaxVal", "300000");
                }
                else
                {
                    editor.putString("projectFilterMaxVal", "5000");
                }
                editor.putString("projectFilterMinVal","0");
                editor.putString("filterApplied","");
                editor.apply();

                initializeData();
                initializeAdapter();
            }
        });


        tvLatest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mTracker.send(new HitBuilders.EventBuilder()
                        .setCategory("find_jobs")
                        .setLabel("latest")
                        .setAction("viewed")
                        .build());

                tvLatest.setTextColor(getResources().getColor(R.color.white));
                tvPopular.setTextColor(getResources().getColor(R.color.grey_400));
                tvBudget.setTextColor(getResources().getColor(R.color.grey_400));
                tvEnding.setTextColor(getResources().getColor(R.color.grey_400));
                tvFeatured.setTextColor(getResources().getColor(R.color.grey_400));

                sort="";




                initializeData();
                initializeAdapter();


            }
        });

        // Setup refresh listener which triggers new data loading
        swipeContainer.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                // Your code to refresh the list here.
                // Make sure you call swipeContainer.setRefreshing(false)
                // once the network request has completed successfully.

                tvFilterMsg.setVisibility(View.GONE);
                etSearch.setText("");
                q="";
                editor.putString("projectFilterSkills","");
                if(settings.getString("currency","").equalsIgnoreCase("INR")) {
                    editor.putString("projectFilterMaxVal", "300000");
                }
                else
                {
                    editor.putString("projectFilterMaxVal", "5000");
                }
                editor.putString("projectFilterMinVal","0");
                editor.putString("filterApplied","");
                editor.putString("projectFilterCategory","");

                editor.putString("projectFilterSubCategory","");
                editor.putString("selectedCategoryID","");

                editor.apply();


                initializeData();
                initializeAdapter();
            }
        });
        // Configure the refreshing colors
        swipeContainer.setColorSchemeResources(android.R.color.holo_blue_bright,
                android.R.color.holo_green_light,
                android.R.color.holo_orange_light,
                android.R.color.holo_red_light);



        rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);

                if(dy > 0) //check for scroll down
                {
                    visibleItemCount = llm.getChildCount();
                    totalItemCount = llm.getItemCount();
                    pastVisiblesItems = llm.findFirstVisibleItemPosition();


                    Log.d("Visible Item Count",""+visibleItemCount);
                    Log.d("Total Item Count",""+totalItemCount);
                    Log.d("Past Item Count",""+pastVisiblesItems);

                    if (loading)
                    {



                        if ( (visibleItemCount + pastVisiblesItems) >= totalItemCount)
                        {

                            mTracker.send(new HitBuilders.ScreenViewBuilder().build());
                            GoogleAnalytics.getInstance(getApplicationContext()).dispatchLocalHits();

                            Log.v("...", "Scrolling");
                            loading = false;
                            Log.v("...", "Last Item Wow !");
                            //Do pagination.. i.e. fetch new data

                            String page=String.valueOf(pageNumber);

                            getList(page);

                        }
                    }
                }

            }
        });



        rv.addOnItemTouchListener(
                new ProjectList(getApplicationContext(), new ProjectList.OnItemClickListener() {
                    @Override
                    public void onItemClick(View view, int position) {
                        // TODO Handle item click

//                        Toast.makeText(getApplicationContext(),"Project number :"+id,Toast.LENGTH_SHORT).show();

                        editor.putString("project_id",persons.get(position).id);
                        editor.putString("isProposal", "0");
                        editor.apply();

                        Intent i=new Intent(getApplicationContext(),ProjectDetails.class);
                        startActivity(i);
                        overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
                    }
                })
        );


        initializeData();
        initializeAdapter();

    }

    public Action getAction() {
        Thing object = new Thing.Builder()
                .setName(mTitle)
                .setDescription(mDescription)
                .setUrl(mUrl)
                .build();

        return new Action.Builder(Action.TYPE_VIEW)
                .setObject(object)
                .setActionStatus(Action.STATUS_TYPE_COMPLETED)
                .build();
    }
    @Override
    public void onStart() {
        super.onStart();
        mClient.connect();
        AppIndex.AppIndexApi.start(mClient, getAction());
    }


    @Override
    protected void onResume() {
        super.onResume();


        if(settings.getString("filterApplied","").equalsIgnoreCase("1"))
        {
            tvLatest.setTextColor(getResources().getColor(R.color.white));
            tvPopular.setTextColor(getResources().getColor(R.color.grey_400));
            tvBudget.setTextColor(getResources().getColor(R.color.grey_400));
            tvEnding.setTextColor(getResources().getColor(R.color.grey_400));
            tvFeatured.setTextColor(getResources().getColor(R.color.grey_400));

            sort="";

            pageNumber=1;

            initializeData();
            initializeAdapter();
        }
        else if(settings.getString("filterApplied","").equalsIgnoreCase("0"))
        {
            initializeData();
            initializeAdapter();
        }
        else
        {
            tvFilterMsg.setVisibility(View.GONE);
            tvMessage.setVisibility(View.GONE);
            rv.setVisibility(View.VISIBLE);
        }
    }

    private void initializeData(){

        if(settings.getString("filterApplied","").equalsIgnoreCase("1")) {
            tvFilterMsg.setVisibility(View.VISIBLE);

        }
        else
        {
            tvFilterMsg.setVisibility(View.GONE);
        }

            tvMessage.setVisibility(View.GONE);
            rv.setVisibility(View.VISIBLE);

        persons = new ArrayList<>();
        getList("1");
    }

    ProjectListRVAdapter adapter;

    private void initializeAdapter(){
        adapter = new ProjectListRVAdapter(persons);
        rv.setAdapter(adapter);
    }

    private void notifyAdapter()
    {
        adapter.notifyDataSetChanged();
    }


    HashMap<String,String> databaseUserMap;
    ProgressDialog dialog;

    private void getList(final String page)
    {
        dialog = ProgressDialog.show(ProjectList.this, "", "Please Wait...", true);

        String endPoint=tlConstants.projectList;

        HashMap<String,String> params = new HashMap<String, String>();


        DatabaseHandler databaseHandler=new DatabaseHandler(getApplicationContext());
        HashMap<String,String> databaseMap=databaseHandler.getUserLoginAuthDetails();
        databaseUserMap=databaseHandler.getUserBasicDetails();

        params.put("access_token",databaseMap.get("accesstoken"));
        params.put("page",page);
        params.put("q", q);
        params.put("sort",sort);
        params.put("skill_matching",settings.getString("projectFilterSkills",""));
        if(settings.getString("currency","").equalsIgnoreCase("INR")) {
            params.put("pmax", settings.getString("projectFilterMaxVal", "300000"));
        }
        else
        {
            params.put("pmax", settings.getString("projectFilterMaxVal", "5000"));
        }
        params.put("pmin",settings.getString("projectFilterMinVal",""));
        params.put("category",settings.getString("projectFilterCategory",""));
        params.put("currency",settings.getString("currency",""));

        Log.d("Request Params",params.toString());

        tlapi.makeAPIcall(new TLAPI.VolleyCallback(){
            @Override
            public void onSuccess(String result){
                //do stuff here

                Log.d("RESULT",result);


                if(dialog!=null) {
                    if (dialog.isShowing()) {
                        dialog.dismiss();
                    }
                }
                swipeContainer.setRefreshing(false);

                try {
                    JSONObject outerJSON=new JSONObject(result);

                    if (outerJSON.getInt("status")==1) {

                        JSONObject dataObject=outerJSON.getJSONObject("projects");
                        JSONArray dataArray=dataObject.getJSONArray("data");

                        int i;
                        for(i=0;i<dataArray.length();i++)
                        {
                            JSONObject dataArrayObject=dataArray.getJSONObject(i);
                            JSONObject displayjobtypeObject=dataArrayObject.getJSONObject("displayjobtype");

                            String title=dataArrayObject.getString("title");
                            id=dataArrayObject.getString("id");
                            Log.d("ID",id);
                            String currency=dataArrayObject.getString("currency");

                            String budget = tlConstants.amountSymbol(dataArrayObject.getString("budget"), currency);

                            if(displayjobtypeObject.getString("actualvalue").equalsIgnoreCase("3"))//Hourly project
                            {
                                budget = tlConstants.amountSymbol(dataArrayObject.getString("budget"), currency)+"/Hr";
                            }

                            String proposalNum=dataArrayObject.getString("total_proposals");

                            String isFeatured=dataArrayObject.getString("featured");
                            String isNDA = dataArrayObject.getString("addon_nda");
                            String isRecruiter = dataArrayObject.getString("addon_recruiter");
                            String isPrivate = dataArrayObject.getString("addon_private");
                            String isUrgent  = dataArrayObject.getString("addon_urgent");

                            String skills="Skills: ";

                            JSONArray skillsArray=dataArrayObject.getJSONArray("skills");

                                int j;
                                for (j = 0; j < skillsArray.length(); j++) {
                                    JSONObject skillObject = skillsArray.getJSONObject(j);
                                    String temp = skillObject.getString("tag");
                                    temp = temp.replace("_", " ");
                                    skills = skills + temp + ", ";
                                }

                            skills=skills.replaceAll(", $","");

                            persons.add(new ProjectGetSet(title, budget, proposalNum,skills,id,isFeatured,isNDA,isPrivate,isRecruiter,isUrgent));

                        }

                        Log.d("Person Length",persons.size()+"");
                        loading=true;
                        pageNumber=pageNumber+1;
                        notifyAdapter();
                    }
                    else
                    {

                        if(pageNumber>1)
                        {
                         Toast.makeText(getApplicationContext(),"No more data",Toast.LENGTH_SHORT).show();
                        }
                        else {
                            rv.setVisibility(View.GONE);
                            tvMessage.setVisibility(View.VISIBLE);
                            tvMessage.setText(outerJSON.getString("message"));
                        }
                    }
                }
                catch(JSONException e)
                {
                    Log.d("Exception",e.toString());
                }
            }
        },endPoint,params);



    }

    @Override
    protected void onStop() {
        AppIndex.AppIndexApi.end(mClient, getAction());
        mClient.disconnect();
        super.onStop();
        if ((dialog != null) && dialog.isShowing()) {
            dialog.dismiss();
            dialog = null;
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.findfreelancer, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();


        if (id == android.R.id.home) {
            onBackPressed();
            return true;
        }
        if (id == R.id.action_search) {

            mTracker.send(new HitBuilders.EventBuilder()
                    .setCategory("find_jobs")
                    .setAction("clicked_filter")
                    .build());

            Intent intent=new Intent(getApplicationContext(),ProjectFilter.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
            startActivity(intent);

            return true;
        }
        return super.onOptionsItemSelected(item);
    }


    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }

    protected void onNewIntent(Intent intent) {
        String action = intent.getAction();
        String data = intent.getDataString();
        if (Intent.ACTION_VIEW.equals(action) && data != null) {
            String id = data.substring(data.lastIndexOf("/") + 1);

            editor.putString("projectFilterSkills",id);
            editor.apply();
        }
    }



}

Пожалуйста, предложите, что я могу добавить, чтобы избавиться от сбоев и сохранить все функциональные возможности приложения.

PS: это код довольно старого приложения.

0 ответов

Другие вопросы по тегам