0

这是较大代码的简化版本。我刚刚开始使用 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>

日志猫 在此处输入图像描述

4

4 回答 4

3

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

tv.setText(c + "");
于 2013-07-11T22:00:56.807 回答
3

这是你的问题

 tv.setText(c);

将其更改为

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

setText()您将在文档中看到不同的方法。您正在调用的那个接受 anint作为参数,用于查找具有该“id”的资源,因此您需要将变量更改为String. 这就是为什么你得到一个Resource Not found例外。无论变量是什么String resource,它都找不到 a 。idc

只是一个旁注,但您可能希望将解析代码包装在 a 中try/catch,除非您正在执行其他一些错误检查,或者Number Format Exception如果用户输入非整数值,您最终可能会得到 a 。

于 2013-07-11T22:01:00.897 回答
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() 重载需要一个表示资源标识符的字符串或整数。由于cis的类型将int其解释为资源标识符!

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

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

希望有帮助!

于 2013-07-11T22:01:43.847 回答
0

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

于 2013-07-11T22:14:51.343 回答