我收到了错误"很遗憾,"卡"已停止了。"在运行我的Android应用程序时(" Cards"是我的应用程序名称)。 我认为这是由MainActivity(OnCreate)从另一个Java文件调用方法引起的,我只是不知道如何修复它。
我有两个Java文件。
MainActivity:
public class MainActivity extends ActionBarActivity {
Box_Middle1 bm1 = new Box_Middle1();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bm1.MiddleCard(); //Calling the method
}
public void onClick(View v)
{
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.android.contacts");
startActivity(LaunchIntent);
}
public void onClick2(View v)
{
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.android.settings");
startActivity(LaunchIntent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, 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 == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
BoxBottom(第二个Java文件)
public class Box_Middle1 extends ActionBarActivity{
public void MiddleCard()
{
/***********************************************************************************
* CARD GRIDVIEW
* Middle
**********************************************************************************/
ArrayList<Card> cards = new ArrayList<Card>();
//Create a Card
Card card = new Card(this);
//Create a CardHeader
CardHeader header = new CardHeader(this);
//Add Header to card
card.addCardHeader(header);
cards.add(card);
CardGridArrayAdapter mCardArrayAdapter = new CardGridArrayAdapter(this,cards);
CardGridView gridView = (CardGridView) this.findViewById(R.id.bottomGrid);
if (gridView!=null){
gridView.setAdapter(mCardArrayAdapter);
}
}
}
和LogCat: Gist
感谢。
BTW我正在使用this库
答案 0 :(得分:1)
由于Box_Middle1
是一个活动类并使用Android系统服务。正如您在日志中看到的那样,在onCreate()之前,活动无法使用系统服务。您尝试在活动开始执行onCreate()之前对其进行初始化。因此改变
Box_Middle1 bm1 = new Box_Middle1();
要 Box_Middle1 bm1; 的onCreate(){ ... bm1 = new Box_Middle1(); ... }
修改强>
现在我明白了,Box_Middle1 is an activity class!
你应该考虑你的设计。如果为了Context而扩展ActionBarActivity
并且您不打算将其作为活动,则可以使用上下文,否则请阅读Fragments:
public class Box_Middle1 {
Context context;
public void MiddleCard(Context context){
...
this.context=context;
Card card = new Card(context);
...
}
}
从MainActivity调用它,如:
Box_Middle1 bm1;
onCreate(){
...
bm1 = new Box_Middle1(this);
...
}
使用系统服务的对象有自己的生命周期。阅读活动here的生命周期。
答案 1 :(得分:0)
从你的logcat看来调用方法
bm1.MiddleCard();
onStart()中的而不是Activity的onCreate()必须要做的。
答案 2 :(得分:0)
答案 3 :(得分:0)
你的问题肯定不在MainActivity中,我只是在我的模拟器中运行你的代码它运行正常(我只是在MiddleCard()方法中注释了你的代码)。把你的Card类代码放在那里可能是任何人都可以帮助你。并在OnCreate()之前检查您是否未使用任何系统服务。