Android 雄激素类糖类

Android 雄激素类糖类,android,android-manifest,classcastexception,sugarorm,Android,Android Manifest,Classcastexception,Sugarorm,我有一个问题:我在应用程序中使用SugarORM,在AndroidManifest中,我需要设置: <meta-data android:name="DATABASE" android:value="moneyManager.db" /> <meta-data android:name="VERSION" android:value="1"/> <meta-data android:name="QUERY_LOG" android:v

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

<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" />
现在,当我从适配器使用startActivityForResult时:

Intent intent = new Intent(context, NewOperation.class);
((Activity) context).startActivityForResult(intent, MainFragment.REQUEST_CODE);
我认为这个错误:

java.lang.ClassCastException: com.orm.SugarApp cannot be cast to android.app.Activity
我的问题:我如何从清单文件中剪切这个安卓:name=“com.orm.SugarApp”,或者以其他方式解决这个问题

编辑:

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();
        }
    }

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

在mainFragment.startActivityForResult(intent,mainFragment.REQUEST_代码)

解决方案:

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();
        }
    }

}
我离开
((活动)上下文).startActivityForResult(intent,MainFragment.REQUEST\u代码)和片段中的更改

您必须在清单中指定
com.orm.SugarApp
,这是不可避免的

您正试图将
上下文
强制转换为此行中的活动:

((Activity) context).startActivityForResult(intent, MainFragment.REQUEST_CODE);
context
实际上是
com.orm.SugarApp
的一个实例,因此您会遇到崩溃

由于您是从片段执行此操作,因此请改用以下代码:

getActivity().startActivityForResult(intent, MainFragment.REQUEST_CODE);
更新:

不要将应用程序上下文传递给适配器,而是传递活动上下文:

这是错误的:

viewPagerAdapter = new ViewPagerAdapter(getActivity().getApplicationContext(), list, balance_list, periods_list);
    viewPager.setAdapter(viewPagerAdapter);
改为这样做:

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

您正在实例化一个片段,而不是将其附加到任何东西上,然后尝试使用它触发startActivitiesForResult意图。这是错误的,请使用适配器中已有的上下文:

更改此项:

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

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

什么是NewOperation.class?它是一个活动,我调用它从碎片执行它,我已经尝试过了,但是接受了NullPointerException。有什么想法吗?这表明该片段没有附加到某个活动。请参阅此处以获取线索:如果您需要更多帮助,可能需要显示更多代码。我需要看看你的碎片,是我做的。请参见编辑后的问题
MainFragment mainFragment = new MainFragment();
mainFragment.startActivityForResult(intent, MainFragment.REQUEST_CODE);
((Activity) context).startActivityForResult(intent, MainFragment.REQUEST_CODE);