SugarORM在AndroidManifest [英] SugarORM in AndroidManifest

查看:289
本文介绍了SugarORM在AndroidManifest的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题:我用SugarORM我的应用程序,并在AndroidManifest我需要设置:

 <元数据机器人:名字=数据库机器人:值=moneyManager.db/>
        <元数据机器人:名字=版本机器人:值=1/>
        <元数据机器人:名字=QUERY_LOG机器人:值=真/>
        <元数据机器人:名字=DOMAIN_PACKAGE_NAME机器人:值=ua.marinovskiy.moneymanager/>

和这样的:

 的android:NAME =com.orm.SugarApp

而现在,当我使用startActivityForResult从适配器:

 意向意图=新意图(背景下,NewOperation.class);
((活动)上下文).startActivityForResult(意向,MainFragment.REQUEST_ code);

我把这个错误:

  java.lang.ClassCastException:com.orm.SugarApp不能转换为android.app.Activity

我的问题:我怎么能砍这个Android:从清单文件或其他方式来解决这一问题NAME =com.orm.SugarApp

编辑:

 公共类MainFragment扩展片段{    公众最终静态INT REQUEST_ code = 1;    ViewPager viewPager;
    PagerAdapter viewPagerAdapter;    清单<名单,LT; CategoryParent>>清单;
    清单<整数GT; balance_list =新的ArrayList<>();
    清单<串GT; periods_list =新的ArrayList<>();    SugarHelper sugarHelper;    @Nullable
    @覆盖
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){        查看查看= inflater.inflate(R.layout.fragment_main,
                集装箱,FALSE);        sugarHelper =新SugarHelper();        清单= sugarHelper.readAllOoerations(MainActivity.type_of_period,MainActivity.min_date,MainActivity.max_date,MainActivity.addedDate,balance_list);
        periods_list = sugarHelper.getPeriods();
        viewPager =(ViewPager)view.findViewById(R.id.pager);
        viewPagerAdapter =新ViewPagerAdapter(getActivity()getApplicationContext(),列表中,balance_list,periods_list);
        viewPager.setAdapter(viewPagerAdapter);
        viewPager.setCurrentItem(MainActivity.addedDate);        返回视图。
    }
    @覆盖
    公共无效onResume(){
        super.onResume();
        list.clear();
        list.addAll(sugarHelper.readAllOoerations(MainActivity.type_of_period,MainActivity.min_date,MainActivity.max_date,MainActivity.addedDate,balance_list));
        如果(!list.isEmpty()){
            viewPagerAdapter.notifyDataSetChanged();
            viewPager.setAdapter(viewPagerAdapter);
            viewPager.setCurrentItem(MainActivity.addedDate);
        }
    }    @覆盖
    公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
        如果(结果code == getActivity()。RESULT_OK){
            Toast.makeText(getActivity()getApplicationContext(),完成,Toast.LENGTH_SHORT).show();
        }其他{
            Toast.makeText(getActivity()getApplicationContext(),取消,Toast.LENGTH_SHORT).show();
        }
    }}

和我ViewPagerAdapter类:

 公共类ViewPagerAdapter扩展PagerAdapter {    私人OperationsAdapter operationsAdapter;
    私人列表< CategoryParent> categoryParentArrayList;
    私人ExpandableListView expandableListView;    TextView的tv_balance,空,current_period;    上下文语境;
    清单<名单,LT; CategoryParent>>清单;
    清单<整数GT; balance_list;
    清单<串GT;期;    LayoutInflater吹气;    SugarHelper sugarHelper;    公共ViewPagerAdapter(上下文的背景下,列表与LT;名单< CategoryParent>>列表,列表与LT;整数GT; balance_list,列表与LT;弦乐>周期){
        this.context =背景;
        this.list =清单;
        this.balance_list = balance_list;
        this.periods =期;
    }    @覆盖
    公众诠释的getCount(){
        返回则为list.size();
    }    @覆盖
    公共布尔isViewFromObject(查看视图,Object对象){
        返回查看==((RelativeLayout的)对象);
    }    @覆盖
    公共对象instantiateItem(ViewGroup中的容器,INT位置){        吹气=(LayoutInflater)上下文
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        查看查看= inflater.inflate(R.layout.viewpager_item,集装箱,
                假);        sugarHelper =新SugarHelper();        tv_balance =(TextView中)view.findViewById(R.id.balance_operations);
        current_period =(TextView中)view.findViewById(R.id.current_period);
        current_period.setText(periods.get(位置));
        的setBalance(balance_list,位置);        expandableListView =(ExpandableListView)view.findViewById(R.id.expListView);
        categoryParentArrayList = list.get(位置);        如果(!categoryParentArrayList.isEmpty()){            空=(TextView中)view.findViewById(R.id.if_empty);
            empty.setVisibility(View.INVISIBLE);            operationsAdapter =新OperationsAdapter(背景下,categoryParentArrayList);
            expandableListView.setAdapter(operationsAdapter);            expandableListView.setOnChildClickListener(新ExpandableListView.OnChildClickListener(){
                @覆盖
                公共布尔onChildClick(ExpandableListView父视图V,INT groupPosition,诠释childPosition,长ID){                    v.setBackgroundColor(Color.parseColor(#B2EBF2));                    意向意图=新意图(背景下,NewOperation.class);
                    MainFragment mainFragment =新MainFragment();
                    mainFragment.startActivityForResult(意向,MainFragment.REQUEST_ code);                    返回false;
                }
            });            expandableListView.setOnGroupClickListener(新ExpandableListView.OnGroupClickListener(){
                @覆盖
                公共布尔onGroupClick(ExpandableListView父视图V,INT groupPosition,长ID){                    Toast.makeText(背景下,群,Toast.LENGTH_LONG).show();                    返回false;
                }
            });
        }        ((ViewPager)容器).addView(视图);        返回视图。
    }    @覆盖
    公共无效destroyItem(ViewGroup中的容器,INT位置,Object对象){
        //来自ViewPager删除viewpager_item.xml
        ((ViewPager)容器).removeView((RelativeLayout的)对象);    }    公共无效的setBalance(列表<整数GT; balance_list,INT位置){
        tv_balance.setText(余额:$+ balance_list.get(位置));
        如果(balance_list.get(位置)℃,){
            tv_balance.setBackgroundResource(R.drawable.balance_minus_style);
        }其他{
            tv_balance.setBackgroundResource(R.drawable.balance_plus_style);
        }
    }

和异常:

  09-03 14:40:​​03.915 13091-13091 / ua.marinovskiy.moneymanager E / AndroidRuntime:致命异常:主要
    java.lang.IllegalStateException:片段MainFragment {} 426ee278未连接到活动
            在android.support.v4.app.Fragment.startActivityForResult(Fragment.java:906)
            在ua.marinovskiy.moneymanager.adapter.ViewPagerAdapter $ 1.onChildClick(ViewPagerAdapter.java:95)
            在android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:583)
            在android.widget.ExpandableListView.performItemClick(ExpandableListView.java:522)
            在android.widget.AbsListView $ PerformClick.run(AbsListView.java:2812)
            在android.widget.AbsListView $ 1.run(AbsListView.java:3571)
            在android.os.Handler.handleCallback(Handler.java:725)
            在android.os.Handler.dispatchMessage(Handler.java:92)
            在android.os.Looper.loop(Looper.java:153)
            在android.app.ActivityThread.main(ActivityThread.java:5297)
            在java.lang.reflect.Method.invokeNative(本机方法)
            在java.lang.reflect.Method.invoke(Method.java:511)
            在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:833)
            在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
            在dalvik.system.NativeStart.main(本机方法)

ua.marinovskiy.moneymanager.adapter.ViewPagerAdapter $ 1.onChildClick(ViewPagerAdapter.java:95)

在mainFragment.startActivityForResult(意向,MainFragment.REQUEST_ code);

解决方案:

我离开
((活动)上下文).startActivityForResult(意向,MainFragment.REQUEST_ code); 和片段的变化,当我呼吁适配器getActivity()getApplicationContext()。 getActivity()。


解决方案

您必须指定 com.orm.SugarApp 在你的清单,有没有避免这种

您正试图投背景来的活动在这一行:

 ((活动)上下文).startActivityForResult(意向,MainFragment.REQUEST_ code);

背景实际上 com.orm.SugarApp 因此,为什么你所得到的崩溃。<实例/ p>

由于您是从片段执行此则使用以下code来代替:

  getActivity()startActivityForResult(意向,MainFragment.REQUEST_ code)。

更新:

不通过一个应用程序上下文适配器,通过一个活动背景:

这是错误的:

  viewPagerAdapter =新ViewPagerAdapter(getActivity()getApplicationContext(),列表中,balance_list,periods_list);
    viewPager.setAdapter(viewPagerAdapter);

做到这一点,而不是:

  viewPagerAdapter =新ViewPagerAdapter(getActivity(),列表中,balance_list,periods_list);
    viewPager.setAdapter(viewPagerAdapter);

更新:

您正在实例化一个片段,它没有连接到任何东西,然后试图用它来把火关startActivitiesForResult意图。这是不对的,使用适配器此范围内,你已经拥有的背景:

更改此:

  MainFragment mainFragment =新MainFragment();
mainFragment.startActivityForResult(意向,MainFragment.REQUEST_ code);

要这样:

 ((活动)上下文).startActivityForResult(意向,MainFragment.REQUEST_ code);

I've one problem: I use SugarORM for my app and in AndroidManifest I need to set this:

<meta-data android:name="DATABASE" android:value="moneyManager.db" />
        <meta-data android:name="VERSION" android:value="1"/>
        <meta-data android:name="QUERY_LOG" android:value="true"/>
        <meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="ua.marinovskiy.moneymanager" />

And this:

android:name="com.orm.SugarApp"

And now, when I'm using startActivityForResult from adapter:

Intent intent = new Intent(context, NewOperation.class);
((Activity) context).startActivityForResult(intent, MainFragment.REQUEST_CODE);

I take this error:

java.lang.ClassCastException: com.orm.SugarApp cannot be cast to android.app.Activity

My question: how I can cut this android:name="com.orm.SugarApp" from Manifest file or another way to resolve this problem?

EDIT:

public class MainFragment extends Fragment {

    public final static int REQUEST_CODE = 1;

    ViewPager viewPager;
    PagerAdapter viewPagerAdapter;

    List<List<CategoryParent>> list;
    List<Integer> balance_list = new ArrayList<>();
    List<String> periods_list = new ArrayList<>();

    SugarHelper sugarHelper;

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

        View view = inflater.inflate(R.layout.fragment_main,
                container, false);

        sugarHelper = new SugarHelper();

        list = sugarHelper.readAllOoerations(MainActivity.type_of_period, MainActivity.min_date, MainActivity.max_date, MainActivity.addedDate, balance_list);
        periods_list = sugarHelper.getPeriods();
        viewPager = (ViewPager) view.findViewById(R.id.pager);
        viewPagerAdapter = new ViewPagerAdapter(getActivity().getApplicationContext(), list, balance_list, periods_list);
        viewPager.setAdapter(viewPagerAdapter);
        viewPager.setCurrentItem(MainActivity.addedDate);

        return view;
    }


    @Override
    public void onResume() {
        super.onResume();
        list.clear();
        list.addAll(sugarHelper.readAllOoerations(MainActivity.type_of_period, MainActivity.min_date, MainActivity.max_date, MainActivity.addedDate, balance_list));
        if (!list.isEmpty()) {
            viewPagerAdapter.notifyDataSetChanged();
            viewPager.setAdapter(viewPagerAdapter);
            viewPager.setCurrentItem(MainActivity.addedDate);
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == getActivity().RESULT_OK) {
            Toast.makeText(getActivity().getApplicationContext(), "done", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(getActivity().getApplicationContext(), "cancel", Toast.LENGTH_SHORT).show();
        }
    }

}

And my ViewPagerAdapter class:

public class ViewPagerAdapter extends PagerAdapter {

    private OperationsAdapter operationsAdapter;
    private List<CategoryParent> categoryParentArrayList;
    private ExpandableListView expandableListView;

    TextView tv_balance, empty, current_period;

    Context context;
    List<List<CategoryParent>> list;
    List<Integer> balance_list;
    List<String> periods;

    LayoutInflater inflater;

    SugarHelper sugarHelper;

    public ViewPagerAdapter(Context context, List<List<CategoryParent>> list, List<Integer> balance_list, List<String> periods) {
        this.context = context;
        this.list = list;
        this.balance_list = balance_list;
        this.periods = periods;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == ((RelativeLayout) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.viewpager_item, container,
                false);

        sugarHelper = new SugarHelper();

        tv_balance = (TextView) view.findViewById(R.id.balance_operations);
        current_period = (TextView) view.findViewById(R.id.current_period);
        current_period.setText(periods.get(position));
        setBalance(balance_list, position);

        expandableListView = (ExpandableListView) view.findViewById(R.id.expListView);
        categoryParentArrayList = list.get(position);

        if (!categoryParentArrayList.isEmpty()) {

            empty = (TextView) view.findViewById(R.id.if_empty);
            empty.setVisibility(View.INVISIBLE);

            operationsAdapter = new OperationsAdapter(context, categoryParentArrayList);
            expandableListView.setAdapter(operationsAdapter);

            expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
                @Override
                public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {

                    v.setBackgroundColor(Color.parseColor("#B2EBF2"));

                    Intent intent = new Intent(context, NewOperation.class);
                    MainFragment mainFragment = new MainFragment();
                    mainFragment.startActivityForResult(intent, MainFragment.REQUEST_CODE);

                    return false;
                }
            });

            expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
                @Override
                public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {

                    Toast.makeText(context, "group", Toast.LENGTH_LONG).show();

                    return false;
                }
            });
        }

        ((ViewPager) container).addView(view);

        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // Remove viewpager_item.xml from ViewPager
        ((ViewPager) container).removeView((RelativeLayout) object);

    }

    public void setBalance(List<Integer> balance_list, int position) {
        tv_balance.setText("Balance: $" + balance_list.get(position));
        if (balance_list.get(position) < 0) {
            tv_balance.setBackgroundResource(R.drawable.balance_minus_style);
        } else {
            tv_balance.setBackgroundResource(R.drawable.balance_plus_style);
        }
    }

And exception:

09-03 14:40:03.915  13091-13091/ua.marinovskiy.moneymanager E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalStateException: Fragment MainFragment{426ee278} not attached to Activity
            at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:906)
            at ua.marinovskiy.moneymanager.adapter.ViewPagerAdapter$1.onChildClick(ViewPagerAdapter.java:95)
            at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:583)
            at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:522)
            at android.widget.AbsListView$PerformClick.run(AbsListView.java:2812)
            at android.widget.AbsListView$1.run(AbsListView.java:3571)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:153)
            at android.app.ActivityThread.main(ActivityThread.java:5297)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
            at dalvik.system.NativeStart.main(Native Method)

ua.marinovskiy.moneymanager.adapter.ViewPagerAdapter$1.onChildClick(ViewPagerAdapter.java:95)

at mainFragment.startActivityForResult(intent, MainFragment.REQUEST_CODE);

SOLUTION:

I leave ((Activity) context).startActivityForResult(intent, MainFragment.REQUEST_CODE); and change in fragment, when I call adapter getActivity().getApplicationContext() on getActivity().

解决方案

You MUST specify com.orm.SugarApp in your manifest, there is no avoiding this.

You are trying to cast context to an Activity in this line:

((Activity) context).startActivityForResult(intent, MainFragment.REQUEST_CODE);

context is actually an instance of com.orm.SugarApp hence why you are getting the crash.

Since you are executing this from a Fragment then use the following code instead:

getActivity().startActivityForResult(intent, MainFragment.REQUEST_CODE);

UPDATE:

Don't pass an Application context to your adapter, pass an Activity context:

This is wrong:

viewPagerAdapter = new ViewPagerAdapter(getActivity().getApplicationContext(), list, balance_list, periods_list);
    viewPager.setAdapter(viewPagerAdapter);

Do this instead:

viewPagerAdapter = new ViewPagerAdapter(getActivity(), list, balance_list, periods_list);
    viewPager.setAdapter(viewPagerAdapter);

UPDATE:

You're instantiating a Fragment, not attaching it to anything and then trying to use it to fire off a startActivitiesForResult intent. This is wrong, use the context you already have within the adapter for this:

Change this:

MainFragment mainFragment = new MainFragment();
mainFragment.startActivityForResult(intent, MainFragment.REQUEST_CODE);

To this:

((Activity) context).startActivityForResult(intent, MainFragment.REQUEST_CODE);

这篇关于SugarORM在AndroidManifest的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆