【问题标题】:Onclick simple program giving logic error ( 'Unable to open stack trace file '/data/anr/traces.txt': Permission denied')Onclick 简单程序给出逻辑错误('无法打开堆栈跟踪文件'/data/anr/traces.txt':权限被拒绝')
【发布时间】:2011-12-08 06:34:04
【问题描述】:

我收到错误'无法打开堆栈跟踪文件'/data/anr/traces.txt':权限被拒绝',我知道这与逻辑错误有关;问题是我的 xml 文件是 spic 和 span,因此我认为它必须是活动类。

我有一个主布局 (main.xml),其中包含按钮:“开始”和“说明”。单击说明按钮时,它应该转到布局:instructions.xml,当单击开始按钮时,它应该转到布局:test_layout.xml。

如有任何见解,我将不胜感激,并为您倾倒数百万美元的声誉。谢谢。

-是我正在实施 OnClickListener 的问题吗?

-不要在第二种方法('public void onClick')之上放置@Override 是什么?因为它说我只能在覆盖超类时放置它。**

请,它的代码很短,如果您能快速浏览一下并告诉我您的想法,我将不胜感激。我在代码下方发布了清单。

package it.will.work;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;



public class ActualWorkingQuizActivity extends Activity implements OnClickListener{


 Button start = (Button) findViewById(it.will.work.R.id.start_main);
 Button instructions = (Button) findViewById(it.will.work.R.id.instructions_main);


    /* Called when the activity is first created. */
       @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


     //sets the Click Listeners
    start.setOnClickListener(this);
    instructions.setOnClickListener(this); 

}

public void onClick(View v) {
     if (v==start) {
         setContentView(it.will.work.R.layout.test_layout);
     }
     else if (v==instructions) {
         setContentView(it.will.work.R.layout.instructions);
}
     }
     }

这是我的清单。

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

   <uses-sdk android:minSdkVersion="7" />

   <application
       android:icon="@drawable/starwarsicon"
       android:label="@string/appname" >
       <activity
           android:label="@string/appname"
           android:name=".ActualWorkingQuizActivity" >
           <intent-filter >
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>

【问题讨论】:

  • 运行配置中是否勾选了调试选项?
  • 此消息并不反映程序中导致程序崩溃的错误,而是反映了错误报告代码中的错误。当您解决导致程序崩溃的问题时,您将停止触发报告代码并停止遇到此错误。

标签: android android-emulator android-widget android-manifest


【解决方案1】:

在 onCreate() 中初始化您的按钮。

start = (Button) findViewById(R.id.start_main);
instructions = (Button) findViewById(R.id.instructions_main);

在 onClick() 方法中进行这样的更改

public void onClick(View v)
{
    if (v.getId() == R.id.start_main)
    {
      setContentView(R.layout.test_layout);
    } else if (v.getId() == R.id.instructions_main)
    {
      setContentView(R.layout.instructions);
    }
}

或替代

public void onClick(View v)
{
    if (v.equals(start))
    {
      setContentView(R.layout.test_layout);
    } else if (v.equals(instructions))
    {
      setContentView(R.layout.instructions);
    }
}

【讨论】:

  • 它没有改变任何东西,因为:'Button start = (Button) findViewById(it.will.work.R.id.start_main);按钮说明 = (Button) findViewById(it.will.work.R.id.instructions_main);'
  • 同样的错误:'无法打开堆栈跟踪文件'/data/anr/traces.txt':权限被拒绝'。您是否还有其他想法,我是否应该用您的一种替代格式替换我的格式,即使它仍然显示错误,使用 = 运算符有什么问题。谢谢,如果您有其他解决方案,我很想听听。
  • 使用 == 比较引用。另一方面,object.equals() 比较值
  • 我不知道我做错了什么,我可以使用内联方式来实现它,但我宁愿这样做,以便将来我可以添加更多按钮等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 2019-10-23
  • 2011-12-27
相关资源
最近更新 更多