致命异常主要android

Posted

技术标签:

【中文标题】致命异常主要android【英文标题】:FATAL Exception Main 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”那么它可以工作(至少不要引发破管异常) 【参考方案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 方法。这是不可能的,因为视图位于主线程中,无法从任何其他线程访问它们。

【讨论】:

以上是关于致命异常主要android的主要内容,如果未能解决你的问题,请参考以下文章

致命异常主要在 Android 上运行应用程序?

致命异常:主要用于数据包嗅探应用程序

致命异常:主要 java.lang.NoClassDefFoundError:android.support.v7.internal.widget.TintManager

获取 Android 运行时:致命异常

在发布(dexguard)上构建但在调试中没有出现致命异常

致命异常: main ,尝试在空对象引用上调用虚拟方法 [重复]