【问题标题】:FATAL Exception Main android致命异常主要android
【发布时间】:2012-09-08 23:54:08
【问题描述】:

我收到 FATAL Exception 主要错误。有什么帮助吗?

代码如下:

private void copyStream(String assetFilename, String outFileName) 抛出 IOException {

      Process mSuProcess;
      mSuProcess = Runtime.getRuntime().exec("su");
      ContextWrapper myContext = null;
                  InputStream myInput = myContext.getAssets().open(assetFilename);

      OutputStream myOutput = new FileOutputStream(outFileName);

      //transfer bytes from the inputfile to the outputfile
      byte[] buffer = new byte[2048];
      int length;
      while ((length = myInput.read(buffer))>0){
          myOutput.write(buffer, 0, length);
      }

      //Close the streams
      myOutput.flush();
      myOutput.close();
      myInput.close();

  }


public void copyon(View view) throws IOException
{
  copyStream("floaton.xml","/system/etc/excluded-input-devices.xml"); 

}

public void copyoff(View view) throws IOException
{
 copyStream("floatoff.xml","/system/etc/excluded-input-devices.xml");

}

还有logcat

09-16 19:52:26.654: E/AndroidRuntime(294):FATAL EXCEPTION: main 09-16 19:52:26.654: E/AndroidRuntime(294):java.lang.IllegalStateException: 无法执行活动 09-16 19:52:26.654 的方法: E/AndroidRuntime(294):在 android.view.View$1.onClick(View.java:2144) 09-16 19:52:26.654: E/AndroidRuntime(294):at android.view.View.performClick(View.java:2485) 09-16 19:52:26.654: E/Android运行时(294):在 android.view.View$PerformClick.run(View.java:9080) 09-16 19:52:26.654: E/Android运行时(294):在 android.os.Handler.handleCallback(Handler.java:587) 09-16 19:52:26.654: E/AndroidRuntime(294):at android.os.Handler.dispatchMessage(Handler.java:92) 09-16 19:52:26.654: E/AndroidRuntime(294):at android.os.Looper.loop(Looper.java:123) 09-16 19:52:26.654: E/Android运行时(294):在 android.app.ActivityThread.main(ActivityThread.java:3683) 09-16 19:52:26.654: E/AndroidRuntime(294):at java.lang.reflect.Method.invokeNative(Native Method) 09-16 19:52:26.654: E/AndroidRuntime(294):at java.lang.reflect.Method.invoke(Method.java:507) 09-16 19:52:26.654: E/Android运行时(294):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 09-16 19:52:26.654: E/AndroidRuntime(294):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 09-16 19:52:26.654: E/AndroidRuntime(294):at dalvik.system.NativeStart.main(本机方法)09-16 19:52:26.654: E/AndroidRuntime(294):引起: java.lang.reflect.InvocationTargetException 09-16 19:52:26.654: E/AndroidRuntime(294):在 java.lang.reflect.Method.invokeNative(Native 方法) 09-16 19:52:26.654: E/AndroidRuntime(294):at java.lang.reflect.Method.invoke(Method.java:507) 09-16 19:52:26.654: E/AndroidRuntime(294):在 android.view.View$1.onClick(View.java:2139) 09-16 19:52:26.654: E/AndroidRuntime(294): ... 11 更多 09-16 19:52:26.654:E/AndroidRuntime(294):引起:java.io.IOException: 断管 09-16 19:52:26.654: E/AndroidRuntime(294): at org.apache.harmony.luni.platform.OSFileSystem.write(本机方法) 09-16 19:52:26.654: E/AndroidRuntime(294): 在 dalvik.system.BlockGuard$WrappedFileSystem.write(BlockGuard.java:171) 09-16 19:52:26.654: E/AndroidRuntime(294):at java.io.FileOutputStream.write(FileOutputStream.java:300) 09-16 19:52:26.654: E/AndroidRuntime(294):at java.io.FileOutputStream.write(FileOutputStream.java:256) 09-16 19:52:26.654: E/AndroidRuntime(294):at java.io.DataOutputStream.writeBytes(DataOutputStream.java:167)

【问题讨论】:

  • 我面临同样的问题.. 但是如果我将“su”更改为“sh”那么它可以工作(至少不要引发破管异常)

标签: android exception main


【解决方案1】:

异常的基础似乎来自“FileOutputStream.write”,您是否已将写入权限添加到您的清单?

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

【讨论】:

    【解决方案2】:

    在你的 mainfest 中添加这个权限。我希望它对你有用,你应该初始化这个对象。在你的代码中,你给上下文值 null 这就是它不起作用的原因。

    /** 需要一些 Intilization 而不是 null

    ContextWrapper myContext = null;

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    

    【讨论】:

    • /** 需要一些 Intilization 而不是 null ContextWrapper myContext = null;
    • 我将 ContextWrapper myContext = null 改为私有 ContextWrapper myContext; 甚至删除了 myContext,仍然没有解决方案。
    • 初始化你的 ContextWrapper,比如 ContextWrapper myContext=new ContextWrapper();
    【解决方案3】:

    请使用 AsyncTask 或 Thread。 如果你写了自己的方法,你可以这样使用:

    new Thread(
        new Runnable() {
            @Override
            public void run() {
                copyStream();
            }
        }
    );
    

    或使用 AsyncTask

    【讨论】:

      【解决方案4】:

      默认情况下,您没有/system/etc 的写入权限,(除非您对您的设备进行了一些破解)。改成Environment.getExternalStorageDirectory().getPath() + "/folderName/excluded-input-devices.xml"

      【讨论】:

        【解决方案5】:

        您正在线程内调用 onClick 方法。这是不可能的,因为视图位于主线程中,无法从任何其他线程访问它们。

        【讨论】:

          猜你喜欢
          • 2012-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-03
          • 1970-01-01
          • 2012-03-04
          相关资源
          最近更新 更多