【问题标题】:Can't start another "Activity" in Android - Gives Error无法在 Android 中启动另一个“活动” - 出现错误
【发布时间】:2013-07-11 21:57:30
【问题描述】:

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

【问题讨论】:

  • 在 LogCat 视图中,突出显示异常的行,然后按 &lt;Ctrl&gt;-&lt;C&gt; 将它们复制到剪贴板。然后,您可以将它们作为文本粘贴到您的问题中。这比屏幕截图要好得多,因为您可以捕获整个堆栈跟踪,而不仅仅是适合屏幕截图的内容。

标签: android exception android-activity resources


【解决方案1】:

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

tv.setText(c + "");

【讨论】:

    【解决方案2】:

    这是你的问题

     tv.setText(c);
    

    改成

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

    您将看到here in the docs 有不同的setText() 方法。您正在调用的那个接受int 作为参数,用于查找具有该“id”的资源,因此您需要将变量更改为String。这就是为什么您会收到 Resource Not found 异常。无论c 是什么变量,它都找不到带有idString resource

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

    【讨论】:

    • 非常感谢!效果很好!
    【解决方案3】:

    这是你的问题:

    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));
    

    希望有帮助!

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-23
        • 1970-01-01
        • 1970-01-01
        • 2016-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多