【问题标题】:The first picture comes out. When I slide the screen, the 2nd picture comes out and then crashes第一张图出来了。当我滑动屏幕时,第二张图片出来然后崩溃
【发布时间】:2019-09-13 21:00:26
【问题描述】:

以下错误

09-13 16:21:27.011 3048-3048/com.mobilprogramlar.viewpager_1 E/AndroidRuntime: FATAL EXCEPTION: main 进程:com.mobilprogramlar.viewpager_1,PID:3048 java.lang.OutOfMemoryError:无法分配 35389452 字节分配,16777216 可用字节和 27MB 直到 OOM 在 dalvik.system.VMRuntime.newNonMovableArray(本机方法) 在 android.graphics.BitmapFactory.nativeDecodeAsset(本机方法) 在 android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609) 在 android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444) 在 android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080) 在 android.content.res.Resources.loadDrawableForCookie(Resources.java:2635) 在 android.content.res.Resources.loadDrawable(Resources.java:2540) 在 android.content.res.Resources.getDrawable(Resources.java:806) 在 android.content.Context.getDrawable(Context.java:458) 在 androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:463) 在 androidx.appcompat.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:203) 在 androidx.appcompat.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:191) 在 androidx.appcompat.content.res.AppCompatResources.getDrawable(AppCompatResources.java:102) 在 androidx.appcompat.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:86) 在 androidx.appcompat.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:94) 在 com.mobilprogramlar.viewpager_1.SliderAdapter.instantiateItem(SliderAdapter.java:51) 在 androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010) 在 androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1224) 在 androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092) 在 androidx.viewpager.widget.ViewPager$3.run(ViewPager.java:273) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 在 android.view.Choreographer.doCallbacks(Choreographer.java:670) 在 android.view.Choreographer.doFrame(Choreographer.java:603) 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 09-13 16:26:27.113 3048-3048/com.mobilprogramlar.viewpager_1 I/Process:发送信号。 PID:3048 SIG:9

package com.mobilprogramlar.viewpager_1;

import android.content.Context;
//import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import androidx.viewpager.widget.PagerAdapter;


public class SliderAdapter extends PagerAdapter {

    Context context;


    int[] img = {R.drawable.foraritdizi1,R.drawable.forbaginti,R.drawable.forbasit1,
            R.drawable.forbinom1,R.drawable.forbolme1,R.drawable.ic_launcher_foreground};

    public SliderAdapter(Context context) {
        this.context = context;
    }

    @Override
    public int getCount() {
        return img.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {

        return view == object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        ImageView imageView;

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View itemView = inflater.inflate(R.layout.slider_item,container,false);

        imageView = itemView.findViewById(R.id.slider_image_view);

        Toast.makeText(context,"position:"+position,Toast.LENGTH_LONG).show();
        **imageView.setImageResource(img[position]);**
        //imageView.setImageResource(img.get(position).getImage_drawable());

        //imageView.setImageResource(img[position]);

        Log.d("tag","Image Position -> " + img[position]);
        container.addView(itemView);
        return itemView;

    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((LinearLayout) object);
    }
}

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager_slider);

        viewPager.setAdapter(new SliderAdapter(MainActivity.this));
    }
}

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <!--android.support.v4.view.ViewPager-->
    <androidx.viewpager.widget.ViewPager
        android:id="@+id/view_pager_slider"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

第一张图出来了。当我滑动屏幕时,第二张图片出来然后崩溃。

imageView.setImageResource(img[position]);行显示错误。

【问题讨论】:

  • 请分享完整代码
  • 导入androidx.appcompat.app.AppCompatActivity;导入androidx.viewpager.widget.ViewPager;导入android.os.Bundle;公共类 MainActivity 扩展 AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager_slider); viewPager.setAdapter(new SliderAdapter(MainActivity.this)); } }
  • 请分享slider_item的代码

标签: javascript android androidx


【解决方案1】:

您正在使用大图像尺寸

int[] img = {R.drawable.foraritdizi1,R.drawable.forbaginti,R.drawable.forbasit1,
            R.drawable.forbinom1,R.drawable.forbolme1,R.drawable.ic_launcher_foreground};

这会导致 java.lang.OutOfMemoryError。 尝试减小这些图像的大小并在清单中添加

<application
        android:hardwareAccelerated="true"
        android:largeHeap="true"
        >

【讨论】:

  • 代码在 android 中未锁定。当我把代码转成androidX的时候就麻烦了。
猜你喜欢
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 2012-06-07
  • 1970-01-01
相关资源
最近更新 更多