无法在Android中启动另一个“活动” - 给出错误

时间:2013-07-11 21:57:31

标签: android exception android-activity resources

这是更大代码的简化版本。我刚开始使用Android编程,并且在过去的一个小时内严重困扰了这个问题。

    /**Main Activity**/

    sumBut.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View arg0) {
            Intent intent = new Intent(MainActivity.this, SumActivity.class);
            intent.putExtra("var1", et1.getText().toString());
            intent.putExtra("var2", et2.getText().toString());
            startActivity(intent);
        }
    });

此代码从文本框中获取两个变量,并将用户驱动到另一个活动,其中将显示这些数字的总和。

以下是目标活动:

    public class SumActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sum);

    TextView tv = (TextView) findViewById(R.id.textView1);
    Intent intent = getIntent();
    int a = Integer.parseInt(intent.getStringExtra("var1"));
    int b = Integer.parseInt(intent.getStringExtra("var2"));
    int c = a+b;
    tv.setText(c);
}

我创建的所有类的res / layout文件夹中都有关联的xml文件。

来自我的Manifest.xml文件的示例

  <activity
        android:name="com.example.summer.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.example.summer.SumActivity"></activity>
    <activity android:name="com.example.summer.DifActivity"></activity>

logcat的 enter image description here

4 个答案:

答案 0 :(得分:3)

您在tv.setText(c)方法中将int设置为TextView,因此textview认为您正在传递字符串的id(如R.string.name等)。你需要这样做:

tv.setText(c + "");

答案 1 :(得分:3)

这是你的问题

 tv.setText(c);

将其更改为

 tv.setText(String.valueOf(c));

您可以看到here in the docs种不同的setText()方法。您正在调用的那个接受int作为参数,用于查找具有该“id”的资源,因此您需要将变量更改为String。这就是您获得Resource Not found例外的原因。它无法找到String resource id的{​​{1}}变量{。}}。

只是旁注,但您可能希望将解析代码包装在c中,除非您正在进行其他错误检查,或者如果用户输入非{0},您最终可能会使用try/catch整数值。

答案 2 :(得分:1)

这是你的问题:

Intent intent = getIntent();
int a = Integer.parseInt(intent.getStringExtra("var1"));
int b = Integer.parseInt(intent.getStringExtra("var2"));
int c = a+b;
tv.setText(c);

您正在调用的setText()重载需要字符串或表示资源标识符的整数。由于c的类型为int,因此它将其解释为资源标识符!

用这个替换最后一行应该解决它:

tv.setText(Integer.toString(c));

希望有所帮助!

答案 3 :(得分:0)

小心,并且ussualy看看你的logcat。似乎第一个字符串是由一个问题报告的 - “android.content.res.resources $ notfoundexception string resource id”。这实际上意味着setText()方法应该包含一个字符串参数。同样的问题与您的问题Android: android.content.res.Resources$NotFoundException: String resource ID #0x5

的解决方案有关