我的应用程序停止运行

时间:2013-11-07 12:21:21

标签: android android-layout

我正在编写一个包含两个活动的基本应用程序。两者都包含显示标题的TextView,第一个包含EditText,其中用户键入消息并单击其侧面的按钮,第二个活动将启动,显示用户键入的消息。

它有以下问题:

1.当我点击按钮时,应用程序停止说“不幸写入显示并停止。”,而不是启动第二个活动。

可以在此处找到Logcat: enter link description here,因为将其添加到问题超出限制。

第一项活动的代码: -

package com.practice.myfirstapp1;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
//import android.view.Menu;

public class MainActivity extends Activity {
    public static final String key_name="com.practice.firstApp.key";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void sendMessage(View view){
        Intent intent= new Intent(this, SecondActivity.class);
        EditText editText=(EditText) findViewById(R.id.EditText1_MainActivity);
        String key_value= editText.getText().toString();
        intent.putExtra(key_name, key_value);
        startActivity(intent);
    }

}

第一次活动的布局: -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"

    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context=".MainActivity" >

     <TextView 
        android:id="@+id/TextView1_MainActivity"
        android:layout_alignParentTop="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_centerHorizontal="true"

        android:text="@string/title_MainActivity"
        android:textStyle="bold"/>


    <EditText
        android:id="@+id/EditText1_MainActivity"


        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/TextView1_MainActivity"

        android:hint="@string/EditText_MainActivity"
        android:textStyle="italic" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/TextView1_MainActivity"
        android:layout_toRightOf="@id/EditText1_MainActivity"

        android:text="@string/Button_MainActivity"

        android:onClick="sendMessage"/>

</RelativeLayout>

第二项活动守则: -

package com.practice.myfirstapp1;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        Intent intent= getIntent();
        String intent_value= intent.getStringExtra(MainActivity.key_name);

        TextView textView= new TextView(this);
        textView= (TextView) findViewById(R.id.TextView2_SecondActivity);

        textView.setText(intent_value);

    }
}

第二次活动的布局: -

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" 

    tools:context=".SecondActivity">

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"

        android:layout_centerHorizontal="true"

        android:text="@string/title_SecondActivity"
        android:textStyle="bold"/>

    <TextView
        android:id="@+id/TextView2_SecondActivity"

        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

STRINGS RESOURCE FILE: -

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Write n Display</string>
    <string name="action_settings">Settings</string>

    <string name="title_MainActivity">WRITE</string>
    <string name="EditText_MainActivity">Your Message here</string>

    <string name="Button_MainActivity">Send</string>

    <string name="title_SecondActivity">DISPLAY</string>

</resources>

ANDROID MANIFEST FILE: -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.practice.myfirstapp1"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:debuggable="true" >

        <activity
            android:name="com.practice.myfirstapp1.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity 
            android:name="com.practive.myfirstapp1.SecondActivity"
            android:label="@string/app_name">
        </activity>
    </application>

</manifest>

4 个答案:

答案 0 :(得分:1)

要解决您的第一个问题:将以下代码放在两个xml文件的textview中。

原因:您没有将android:layout_centerHorizontal="true"放入TextView

android:layout_alignParentTop="true"
 android:layout_centerHorizontal="true"
 android:text="@string/title_MainActivity"

解决您的第二个问题:更改第一项活动的布局:

原因:android:layout_width为“0dp”。它应该是wrap_content或fill_parent或match_parent

<EditText
    android:id="@+id/EditText1_MainActivity"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_below="@+id/TextView1_MainActivity"
    android:hint="@string/EditText_MainActivity"
    android:textStyle="italic" />

要:

<EditText
    android:id="@+id/EditText1_MainActivity" 
    android:layout_width="wrap_content" //you can put, fill_parent or match_parent
    android:layout_height="wrap_content"
    android:layout_below="@+id/TextView1_MainActivity"
    android:hint="@string/EditText_MainActivity"
    android:textStyle="italic" />

解决您的第三个问题:更改您的第一个活动代码: -

原因:您已将editText =(EditText)设为findViewById(R.id.EditText1_MainActivity);在sendMessage(视图视图)中。发送消息包含View因此,无论何时启动此方法中的任何组件,它都将在此特定视图上搜索该组件,该组件不正确。您可以在任何不包含任何视图参数的方法中启动组件。如果要在特定视图中启动任何组件,则必须启动它,如editText =(EditText)view.findViewById(R.id.EditText1_MainActivity);.但在您的情况下,edittext位于主视图中,因此您需要将其从sendMessage(View视图)中删除。

public class MainActivity extends Activity {
    public static final String key_name="com.practice.firstApp.key";
  EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText=(EditText) findViewById(R.id.EditText1_MainActivity);
    }

    public void sendMessage(View view){
        Intent intent= new Intent(this, SecondActivity.class);

        String key_value= editText.getText().toString();
        intent.putExtra(key_name, key_value);
        startActivity(intent);
    }

}

更改您的第二个活动

原因:TextView textView = new TextView(this);是初始化xml视图的任何组件的正确方法。

TextView textView= new TextView(this);
textView= (TextView) findViewById(R.id.TextView2_SecondActivity);
textView.setText(intent_value);

要:

    TextView textView;
    textView= (TextView) findViewById(R.id.TextView2_SecondActivity);
    textView.setText(intent_value);

答案 1 :(得分:1)

你可以像这样解决你的问题

1.replace

android:gravity="center_horizontal"的{​​p> android:layout_gravity="center_horizontal"

2.为第一个活动xml

的edittext提供layout_width为wrap_content

3.将您的sendMessage方法公开为非私有

获取logcat在Eclipse中,Goto Window-&gt;显示视图 - &gt;其他 - &gt; Android-&GT; logcat中。

在日食窗口(右上角,就在Open Prospective按钮之前)的LogCat编辑框中写Quick Access。只需选择LogCat,它将打开当前prospec

中的LogCat窗口

答案 2 :(得分:0)

private void sendMessage(View view)更改为public void sendMessage(View view)(私人对公众)

第一次活动的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical" >

 <TextView 
    android:id="@+id/TextView1_MainActivity"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@+string/title_MainActivity"
    android:textStyle="bold"/>


<EditText
    android:id="@+id/EditText1_MainActivity"
     android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="@string/EditText_MainActivity"
    android:textStyle="italic" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/Button_MainActivity"
    android:onClick="sendMessage"/>

第二次活动的布局: -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" 
android:gravity="center_vertical"
tools:context=".SecondActivity">

<TextView 
    android:layout_alignParentTop="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@+string/title_SecondActivity"
    android:textStyle="bold"/>
<TextView
    android:id="@+id/TextView2_SecondActivity"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

答案 3 :(得分:0)

Logcat显示以下内容:

  

引起:android.content.ActivityNotFoundException:无法找到   显性活动类   {com.practice.myfirstapp1 / com.practice.myfirstapp1.SecondActivity};   你有没有在AndroidManifest.xml中声明这个活动?

你确实在manifest中定义了SecondActivity,但包名是错误的( android:name =“com.practive.myfirstapp1.SecondActivity”应该是ndroid:name =“com.practice.myfirstapp1.SecondActivity” )。

<activity
            android:name="com.practice.myfirstapp1.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity 
            android:name="com.practive.myfirstapp1.SecondActivity"
            android:label="@string/app_name">
        </activity>

应该是

<activity
            android:name="com.practice.myfirstapp1.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity 
            android:name="com.practice.myfirstapp1.SecondActivity"
            android:label="@string/app_name">
        </activity>