【问题标题】:apk is not installingapk 没有安装
【发布时间】:2014-05-13 04:47:55
【问题描述】:

我正在安装和测试本地 html 文件。这不起作用,不幸的是我停止了。然后我尝试了没有任何创建的简单活动。 Btu 我仍然遇到同样的问题。没有一个应用程序没有安装。android:minSdkVersion="8" android:targetSdkVersion="16"

05-13 10:09:49.325: D/dalvikvm(3136): Late-enabling CheckJNI
05-13 10:09:49.475: D/AndroidRuntime(3136): Shutting down VM
05-13 10:09:49.475: W/dalvikvm(3136): threadid=1: thread exiting with uncaught exception (group=0x414f42a0)
05-13 10:09:49.480: E/AndroidRuntime(3136): FATAL EXCEPTION: main
05-13 10:09:49.480: E/AndroidRuntime(3136): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testweb/com.example.testweb.MainActivity}: java.lang.NullPointerException
05-13 10:09:49.480: E/AndroidRuntime(3136):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at android.app.ActivityThread.access$700(ActivityThread.java:140)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at android.os.Looper.loop(Looper.java:137)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at android.app.ActivityThread.main(ActivityThread.java:4946)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at java.lang.reflect.Method.invokeNative(Native Method)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at java.lang.reflect.Method.invoke(Method.java:511)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at dalvik.system.NativeStart.main(Native Method)
05-13 10:09:49.480: E/AndroidRuntime(3136): Caused by: java.lang.NullPointerException
05-13 10:09:49.480: E/AndroidRuntime(3136):     at com.example.testweb.MainActivity.copyFile(MainActivity.java:55)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at com.example.testweb.MainActivity.onCreate(MainActivity.java:35)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at android.app.Activity.performCreate(Activity.java:5206)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
05-13 10:09:49.480: E/AndroidRuntime(3136):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
05-13 10:09:49.480: E/AndroidRuntime(3136):     ... 11 more
05-13 10:13:01.780: D/dalvikvm(3136): Debugger has detached; object registry had 1 entries
05-13 10:14:49.625: I/Process(3136): Sending signal. PID: 3136 SIG: 9

代码:

public class MainActivity extends Activity {

    Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mContext = this;

        File f = copyFile(R.raw.index, "index.html");
        File file = new File(f.getAbsolutePath()); 
        String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
        String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
        Intent i = new Intent(Intent.ACTION_VIEW);
    //  i.setClassName("com.google.glass.browser", "com.google.glass.browser.WebBrowserActivity");

        i.setClassName("com.google.android.browser", "com.android.browser.BrowserActivity");

        i.setDataAndType(Uri.fromFile(file),mimetype);
        mContext.startActivity(i);


    }

    private File copyFile(int resourceId, String filename) {
        InputStream in = null; 
        OutputStream out = null;
        File outFile = null;
        try {
            in = mContext.getResources().openRawResource(resourceId);
            outFile = new File(mContext.getExternalFilesDir(null), filename);
            Log.d("Test", "output file" +  outFile.getAbsolutePath());
            out = new FileOutputStream(outFile);
            byte[] buffer = new byte[1024];
            int read;
            while((read = in.read(buffer)) != -1){
                out.write(buffer, 0, read);
            }
        } catch(IOException e) {
            Log.e("Test", "Failed to copy file", e);
        } finally {
            try {
                in.close();
                out.flush();
                out.close();
                in = null;
                out = null;
            } catch (Exception e){}
        }
        return outFile;
    }

【问题讨论】:

  • 你有一个NullPointerException@第55行MainActivity.java
  • 请发布您的 MainActivity.java 代码。错误出现在第 55 行和第 35 行。
  • 检查您的清单文件。 @siddharth:如何检测哪几行之间有错误?就像你说的 55 和 35
  • @Siddharth:检查我编辑的代码..
  • @user3602987 : 检查 Hariharan 的答案。

标签: android eclipse nullpointerexception apk


【解决方案1】:

试试这个..

mContext 未初始化尝试初始化它..

mContext = this;

onCreate

【讨论】:

  • @user3602987 你在哪里添加了那行?
  • 上下文 mContext=this;
【解决方案2】:

您已经安装了更高版本的相同应用程序,因此未安装较低版本的应用程序。

【讨论】:

    【解决方案3】:

    你需要在copyFile()中传递mContext参数。

    检查一下:

    onCreate() 内部,执行以下操作:File f = copyFile(R.raw.index, "index.html", mContext);

    也可以使用MainActivity.this 代替mContext,例如:

    File f = copyFile(R.raw.index, "index.html", MainActivity.this);

    private File copyFile(int resourceId, String filename, Context mContext) {
        InputStream in = null; 
        OutputStream out = null;
        File outFile = null;
        try {
            in = mContext.getResources().openRawResource(resourceId);
            outFile = new File(mContext.getExternalFilesDir(null), filename);
            Log.d("Test", "output file" +  outFile.getAbsolutePath());
            out = new FileOutputStream(outFile);
            byte[] buffer = new byte[1024];
            int read;
            while((read = in.read(buffer)) != -1){
                out.write(buffer, 0, read);
            }
        } catch(IOException e) {
            Log.e("Test", "Failed to copy file", e);
        } finally {
            try {
                in.close();
                out.flush();
                out.close();
                in = null;
                out = null;
            } catch (Exception e){}
        }
        return outFile;
    }
    

    希望这会有所帮助。

    【讨论】: