安装失败,并显示以下错误消息:android.os.ParcelableException:java.io.IOException:仅内部请求,但没有足够的空间

Gab*_*rau 3 java android apk build.gradle

我收到消息

> Installation failed with message Failed to establish session.
Run Code Online (Sandbox Code Playgroud)

因此,在对问题做出一些反应之后,我禁用了“即时运行”功能,并且开始获取

> Installation failed with message Error: android.os.ParcelableException: java.io.IOException: Requested internal only, but not enough space.
Run Code Online (Sandbox Code Playgroud)

我尝试过重建,清理项目,禁用和启用Instant Run以及构建APK,但没有任何方法可以解决问题。

这是我的build.gradle(Module:app)。

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.gabriel.justmeet"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 9
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    useLibrary 'org.apache.http.legacy'
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.volley:volley:1.1.0'
}
Run Code Online (Sandbox Code Playgroud)

这是build.gradle(Project)

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0'


        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'http://repo1.maven.org/maven2' }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)

这是在我修改RegisterActivity时开始的,因此可能会有所帮助

package com.example.gabriel.paska;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.util.HashMap;
import java.util.Map;

public class RegisterActivity extends AppCompatActivity {
    public static final String REGISTER_URL ="http://justmeet.000webhostapp.com/php/register.php";
    public static final String KEY_USERNAME ="username";
    public static final String KEY_PASSWORD="password";
    public static final String KEY_NAME ="name";
    public static final String KEY_AGE="age";
    public static final String REGISTER_SUCCESS ="RegisterSuccess";
    public static final String SHARED_PREF_NAME="tech";
    public static final String USERNAME_SHARED_PREF="username";
    public static final String LOGGEDIN_SHARED_PREF="loggedin";
    private boolean loggedIn=false;
    EditText etAge;
    EditText etName;
    EditText etPassword;
    EditText etUsername;
    Button bRegister;



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

        etAge = findViewById(R.id.etAgeR);
        etName = findViewById(R.id.etNameR);
        etPassword = findViewById(R.id.etPwordR);
        etUsername = findViewById(R.id.etUsernameR);
        bRegister = findViewById(R.id.btRegister);

        bRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                register();
            }
        });
    }
        private void register() {
            final String name = etName.getText().toString().trim();
            final String password = etPassword.getText().toString().trim();
            final String username = etUsername.getText().toString().trim();
            final String age = etAge.getText().toString().trim();

            StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            if(response.trim().equalsIgnoreCase(REGISTER_SUCCESS)){

                                SharedPreferences sharedPreferences = RegisterActivity.this.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);

                                SharedPreferences.Editor editor = sharedPreferences.edit();

                                editor.putBoolean(LOGGEDIN_SHARED_PREF, true);
                                editor.putString(USERNAME_SHARED_PREF, name);

                                editor.apply();

                                Intent intent = new Intent(RegisterActivity.this, UserActivity.class);
                                startActivity(intent);
                            }else{
                                Toast.makeText(RegisterActivity.this, "Register Failed" + response.trim(), Toast.LENGTH_LONG).show();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                        }
                    }){
                @Override
                protected Map<String, String> getParams() throws AuthFailureError {
                    Map<String,String> prams = new HashMap<>();
                    prams.put(KEY_USERNAME, username);
                    prams.put(KEY_PASSWORD, password);
                    prams.put(KEY_NAME, name);
                    prams.put(KEY_AGE, age);

                    return prams;
                }
            };
            RequestQueue requestQueue = Volley.newRequestQueue(this);
            requestQueue.add(stringRequest);
        }
        @Override
        protected void onResume() {
            super.onResume();
            SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREF_NAME,Context.MODE_PRIVATE);
            loggedIn = sharedPreferences.getBoolean(LOGGEDIN_SHARED_PREF, false);
            if(loggedIn){
                Intent intent = new Intent(RegisterActivity.this, UserActivity.class);
                startActivity(intent);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Ras*_*iri 258

此问题与您在模拟器中的存储有关。默认的 AndroidStudio 值 2Gb 对于现代 Android 版本来说是不够的。

在此输入图像描述


解决方案

第1步:关闭模拟器。

步骤2:擦拭模拟器。

在此输入图像描述

步骤3:将内部存储和SD卡更改为4098MB

在此输入图像描述

第四步:运行模拟器。

  • 第 3 步独自为我工作! (12认同)
  • 更改存储大小后,我不得不再次擦除模拟器 (3认同)

Wex*_*Wex 46

这只是虚拟设备空间不足的情况。每次运行应用程序时,虚拟设备上的每次安装都会占用一点空间。随着时间的推移,空间会被填满,直到全部用完。您可以按照一些答案的建议增加空间 - 这最初会起作用,但最终该空间也会用完。

从虚拟设备的“设置”应用程序中,您可以查看剩余空间。在这里你可以看到几乎一整 GB 都用完了,但应用程序本身只使用了 132MB,显然有些问题。

在此输入图像描述

转到 AVD 管理器,在您设备的操作中,有“擦除数据”选项 - 执行此操作。

在此输入图像描述

返回到“设置”应用程序,您现在可以看到空间已释放,并且您的应用程序有空间可以安装 - 直到下一次它用完时,您只需重复此过程即可。

在此输入图像描述

  • 这应该标记为正确答案。它不仅告诉了根本原因,还告诉了如何解决问题。 (3认同)

Mar*_*ler 7

该文件系统没有空间:

java.io.IOException: Requested internal only, but not enough space.
Run Code Online (Sandbox Code Playgroud)

问题是:

android:installLocation="internalOnly"
Run Code Online (Sandbox Code Playgroud)

删除它,或将其替换为:

android:installLocation="preferExternal"
Run Code Online (Sandbox Code Playgroud)

或通过卸载或删除某些内容在设备/仿真器上腾出一些空间-

或者只是将更多的兆字节分配给虚拟SD卡。

  • 在尝试提及任何修改之前,请检查设备上剩余的空间。 (5认同)
  • 我把AVD Manager的SD卡改成1000MB就可以了 (3认同)
  • 这是您设置 installLocation 的位置:https://developer.android.com/guide/topics/manifest/manifest-element.html (2认同)

ins*_*eof 7

在 Android Studio 中,打开 AVD 管理器并编辑有问题的模拟器。在编辑屏幕内,您可能需要单击“显示高级设置”。向下滚动并增加内部内存和 SD 卡内存。完成此操作后,我可以再次安装我的应用程序。


小智 7

如果您使用的是手机,则此错误是由于存储空间较少造成的。腾出一些空间,然后再试一次,它应该可以工作。