不幸的是,...已经因调用方法而停止了

时间:2014-07-11 07:48:57

标签: java android

我收到了错误"很遗憾,"卡"已停止了。"在运行我的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

4 个答案:

答案 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)

哇,当你没有开始教程时,这就是你得到的。您正尝试在另一个活动中创建活动并调用它的方法。我们不会在Android中执行此操作。我们无法在Android中执行此操作。实际上,我们不会在任何平台上做这些事情:)。考虑在Developer Android上阅读一些关于Android开发的教程。

答案 3 :(得分:0)

你的问题肯定不在MainActivity中,我只是在我的模拟器中运行你的代码它运行正常(我只是在MiddleCard()方法中注释了你的代码)。把你的Card类代码放在那里可能是任何人都可以帮助你。并在OnCreate()之前检查您是否未使用任何系统服务。