首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

利用Intent 进行Activity 事件以及页面跳转,出现错误终止

2013-02-03 
利用Intent 进行Activity 事件以及页面跳转,出现异常终止?刚开始学写程序,所以有些代码是之前的,比如如何

利用Intent 进行Activity 事件以及页面跳转,出现异常终止?
刚开始学写程序,所以有些代码是之前的,比如如何在页面上显示一句话之类的。
现在程序有两个按钮,
1. 转换文字-:按下后,当前页面的两行文字会调换位置,然后程序会转向另外一个页面(异常终止出现在这个按钮上)

2. 计算- 按下该按钮之前需要在编辑框中输入一个数字,然后按下按钮,程序会转向第二个页面
3. 在第二个页面中有两个按钮:
   (1)转换文字 - 和<1.>的功能是一样的,只是这个不对文字进行调转,直接回到第一个页面;
   (2)显示结果 - 点击该按钮后,会在该页面的左上角显示在第一个页面的传递过来的数据。

现在的状态:
   (1)主页面中,在编辑框中输入数字,按下 计算 按钮,程序正常转入第二个页面,这时按下 显示结果 按钮可正常显示文字,按下 当前页面的 转换文字 按钮可以正常回到主页面(第一个页面)
   (2)主页面中,直接按下 转换文字 按钮,文字调转后,程序异常退出。 

下面是代码:


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

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.hello.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="SecondActivity"
            android:label="SecondActivity">
        </activity>
    </application>

</manifest>


////////////////////////////////////MainActivity.java////////////////////////////////////////
package com.example.hello;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.util.DisplayMetrics;
import android.widget.TextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.content.Intent;


public class MainActivity extends Activity {

//添加一个文本控件 需要在activity_main中添加一个相应的<TextView>标签,
private TextView mTextView01, mTextView02;

private Button mButton01, mButton02;
private Button calculate;
private RadioButton checked;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);     
        
        //和TextView标签中比较常用的查找xml中id的函数,以及单独设置字符串的重载函数(setText)
        mTextView01 = (TextView) this.findViewById(R.id.mTextView01);
        mTextView01.setText(R.string.welcome);
        //打开资源文件的一种方法DOM(应该是吧)
        final Resources resources = this.getBaseContext().getResources();
          Drawable  darw      = resources.getDrawable(R.drawable.white);
        mTextView01.setBackgroundDrawable(darw);
        
        //第二个textView标签
        mTextView02 = (TextView) this.findViewById(R.id.mTextView02);
        mTextView02.setText(R.string.test_link);
        //使用自带的color类定义文本以及背景颜色
        mTextView02.setBackgroundColor(Color.YELLOW);
        mTextView02.setTextColor(Color.GREEN);
        
        //必须引用 android.util.DisplayMetrics;*/
        DisplayMetrics dw = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dw);

        //获取 mTextView02中的字符串,动态更改为屏幕分辨率的值*/
        CharSequence str01 = getString(R.string.test_link);
        str01 = "这是我手机屏幕的分辨率:" + dw.widthPixels + "  " + dw.heightPixels;
        mTextView02.setText(str01);
        
        //添加一个按钮*//////////////////出错的是这个按钮(主页面的 转换文字 按钮)
        mButton01 = (Button) this.findViewById(R.id.transChar);
        mButton01.setOnClickListener(
        new OnClickListener() {
        public void onClick(View v)
        {
        mTextView01.setText(R.string.test_link);
        mTextView02.setText(R.string.welcome);
        
        //layout 页面转换
        //jumptoLayout2();


        
        // 活动事件转换,new 一个Intent, 并指定一个意向的class(类)
Intent intnt = new Intent();
intnt.setClass(MainActivity.this, SecondActivity.class);

//执行
startActivity(intnt);
/*
 *   此行表示程序在转换时,该Activity已经运行完毕,所以在点击返回键时不会回到之前的页面,而是直接退出。如果想
 * 让程序在按返回键时退回到原先的页面可以注释掉这句话,或者就不要写出来。
 */
MainActivity.this.finish();
        }
        }
    );
        //将数据从一个Activity 传入另一个Activity
        calculate = (Button) this.findViewById(R.id.calculate);
        calculate.setOnClickListener(
        new OnClickListener() {
        public void onClick( View v) {
        //取得输入的身高
        EditText et = (EditText) findViewById(R.id.editText1);
        double height = Double.parseDouble(et.getText().toString());
            //检查单选框
        String sex="";
        checked = (RadioButton) findViewById(R.id.Man);
        if( checked.isChecked())
        sex="M";
        else
        sex="F";
        
        //利用Bundle封装数据
        Bundle bundle = new Bundle();
        bundle.putDouble("height", height);
        bundle.putString("Sex", sex);
        
        //准备转向另一个Activity
        Intent SecndActivity = new Intent();
        SecndActivity.putExtras(bundle);
        SecndActivity.setClass(MainActivity.this, SecondActivity.class);
        startActivity(SecndActivity);
        }
        }
        );
    }
    //页面跳转
    public void jumptoLayout2() {
    setContentView(R.layout.layout2);
    
        mButton02 = (Button) this.findViewById(R.id.Trans2);
        mButton02.setOnClickListener(
        new OnClickListener()  {
        public void onClick(View v){  
        mTextView01.setText(R.string.welcome);
        mTextView02.setText(R.string.test_link);


        jumptoLayout1();

        }
        }
    );
    }
    public void jumptoLayout1()  {
    setContentView(R.layout.activity_main);
    
        mButton01 = (Button) this.findViewById(R.id.transChar);
        mButton01.setOnClickListener(
        new OnClickListener()  {
        
        public void onClick(View v) {     
        jumptoLayout2();
        mTextView01.setText(R.string.test_link);
        mTextView02.setText(R.string.welcome);
        }
        }
    );
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    
}





/////////////////////////////////////////////SecondActivity.java///////////////////////////////
package com.example.hello;

import java.text.NumberFormat;
import java.text.DecimalFormat;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.content.Intent;
import android.widget.TextView;


public class SecondActivity extends Activity{
protected void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout2);

Button btn2;
Button DisplayResult;
final TextView DisplayBMI;

btn2 = (Button) this.findViewById(R.id.Trans2);
        btn2.setOnClickListener(
        new OnClickListener() {
           public void onClick(View v) {
           // new 一个 Intent,并指定一个意向的class(类)
Intent intnt = new Intent();
intnt.setClass(SecondActivity.this, MainActivity.class);

//执行
startActivity(intnt);
/*
 *   此行表示程序在转换时,该Activity已经运行完毕,所以在点击返回键时不会回到之前的页面,而是直接退出。如果想
 * 让程序在按返回键时退回到原先的页面可以注释掉这句话,或者就不要写出来。
 */
SecondActivity.this.finish();
}
}
);
        
        //取出数据
        Bundle bundle = this.getIntent().getExtras();


        final double height = bundle.getDouble("height");
        final String sex    = bundle.getString("Sex");
                
        //获取控件句柄
        DisplayBMI = (TextView) this.findViewById(R.id.DisplayBMI);
        DisplayResult = (Button) this.findViewById(R.id.Display);
        DisplayResult.setOnClickListener(
        new OnClickListener() {
        public void onClick(View v) {
        //点击按钮显示结果
        NumberFormat nf = new DecimalFormat("0.00");
        String s = "你是一位"+getSex(sex)+",\n"+
                   "你的身高为:"+height+",\n"+
           "你的体重为:"+nf.format(getWeight(sex, height));
        DisplayBMI.setText(s);
        }
        }
        );
}
//判断性别 
public String getSex(String sex) {
String sexText="";

        if( sex == "M")  
        sexText = this.getString(R.string.Man);
        else sexText = this.getString(R.string.Woman);
        
        return sexText;
}
//计算体重
public double getWeight( String sex, double high) {
if( getSex(sex) == this.getString(R.id.Man) )
return (high-80) *0.7;
else return (high-60) *0.6;
}
}


[解决办法]
貌似注册的时候错了

<activity 
            android:name=".SecondActivity"
            android:label="SecondActivity">
        </activity>

要在SecondActivity加一点
[解决办法]
没stack trace?
[解决办法]
虽然你的错误显示是44行报错了,可能是你动了程序,应该是45行final double height = bundle.getDouble("height");这行报错了吧,按的是mButton01那里面的Bundle是没有的,所以是空的。但那里也进行了activity跳转。。。

热点排行