SugarORM在AndroidManifest [英] SugarORM in 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屋!