当前位置: 首页 > 面试题库 >

空指针问题显示资产文件夹Android 2.2 SDK中的图像

云远
2023-03-14
问题内容

我查看了Stack上的2个示例,但无法使它们正常工作。我只是
想从资产中的文件夹中获取图像并将其设置为ImageView中的值,
但是返回空指针。我究竟做错了什么?

主要活动:包com.xxx.xxx;

import java.io.InputStream;

import android.app.AlertDialog;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.ViewFlipper;

public class SamplesViewFlipper extends SamplesViewCreator {

    private Bitmap returnedImage;
    ImageView imgView;
    ViewFlipper vf;
    private String imageName = "testImage.png";

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        returnedImage = getImageFromAsset(imageName);

        imgView = (ImageView) findViewById(R.id.dynamicImageView);
        imgView.setImageBitmap(returnedImage); //<-null pointer happens here

        vf = (ViewFlipper) findViewById(R.id.SamplesViewFlipper);
        setContentView(R.layout.view_flipper_samples);

    }

    public void buttonClickHandler(View view) {

        switch (view.getId()) {

            case R.id.nextSampleButton:

                vf.showNext();

                break;

            case R.id.backSampleButton:

                vf.showPrevious();

                break;

        }

    }

}

Extender Class:

package com.xxx.xxx;

import java.io.IOException;
import java.io.InputStream;

import android.app.Activity;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class SamplesViewCreator extends Activity {

     private InputStream is;
     private Bitmap bitmap;

    public Bitmap getImageFromAsset(String imageName) {

        AssetManager mngr = getAssets();
        try {

            is = mngr.open("file:///android_asset/Samples/" + imageName);
            bitmap = BitmapFactory.decodeStream(is);
                    //also tried "Files/" + imageName per example on Stack

        } catch (final IOException e) {

            e.printStackTrace();

        }

        return bitmap;

    }

}

And my two xml files:

<?xml version="1.0" encoding="utf-8"?>      
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/SamplesLayout"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">
    <RelativeLayout
        android:id="@+id/samples_menu"
        android:layout_width="fill_parent" 
        android:layout_height="50dp" 
        android:gravity="center"
        android:background="#0061F9">
        <Button android:id="@+id/nextSampleButton"  
            android:layout_marginRight="10dp"
            android:gravity="center"    
            android:layout_width="50dp"
            android:layout_height="30dp"
            android:text="Next"
            android:textColor="#FFFFFF"
            android:textSize="13dp"
            android:layout_weight="1"
            android:background="@drawable/button"
            android:layout_alignParentRight="true"
            android:onClick="buttonClickHandlerSamples"/>
        <Button android:id="@+id/backSampleButton"
            android:layout_marginLeft="10dp"
            android:gravity="center"    
            android:layout_width="50dp"
            android:layout_height="30dp"
            android:text="Back"
            android:textColor="#FFFFFF"
            android:textSize="13dp"
            android:layout_weight="1"
            android:background="@drawable/button"
            android:onClick="buttonClickHandler"/>
    </RelativeLayout>
    <LinearLayout android:id="@+id/SamplesViewFlipperLayout"
        android:layout_width="wrap_content" android:layout_height="wrap_content">
        <ViewFlipper android:id="@+id/SamplesViewFlipper"
            android:layout_width="wrap_content" android:layout_height="wrap_content">
            <!--adding views to ViewFlipper-->  
            <LinearLayout
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent"
                android:paddingLeft="@dimen/header_pad_left"
                android:paddingRight="@dimen/header_pad_right"
                android:paddingBottom="@dimen/header_pad_bot"
                android:paddingTop="@dimen/header_pad_top"
                android:orientation="vertical"
                android:background="@color/background" >

            </LinearLayout>
        </ViewFlipper>
    </Linear

Layout>

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dynamicImageView"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/default_samples_image"/>

EDIT:

Also tried this, but still get a file not found exception.

Public Bitmap getImageFromAsset() throws IOException {

        try {

            is = getAssets().open("test3.png");

                    bitmap = BitmapFactory.decodeStream(is);

        } catch (final IOException e) {

            e.printStackTrace();

        }

        System.out.println("bitmap is " + bitmap);
        return bitmap;

    }

问题答案:

哪里"file:///android_asset/Samples/" + imageName来的?如果您的
层次结构看起来像asset / file_name.jpg,则只需致电
open(file_name.jpg)。换句话说,尝试将您的替换
file:///android_asset/Samples/" + imageName为just imageName

查看API演示,特别是ReadAsset.java类:

try {
        InputStream is = getAssets().open("read_asset.txt");



 类似资料:
  • 问题内容: 我正在尝试检索对存储在目录中的文件的引用,该文件名为。我尝试这样做如下: 不知何故,当目录中存在do 时,我得到了。我使用和返回数组中的每个元素验证了它。 其中,我尝试获取对PDF文件的引用,然后使用设备上已安装的任何PDF查看器来查看PDF。 我猜想由于前一个问题(检索对文件的引用)返回了,因此下一个被剪切的代码失败了: 有人知道为什么我无法检索对该文件的引用吗?以及为什么我不能使用

  • 如果根文件夹项目中的文件夹, 示例: 我想重组我的文件夹,所以我创建一个新的文件夹叫做src,然后我创建一个子文件夹叫做assets,然后把我的图标放在那里 示例: 这是我在app.js文件中的代码 错误消息:这些文件都不存在 *注意:我已经检查了一遍以确保我没有打错字

  • 当生成发票的PDF文件时,我试图在Spring后端中使用Angular应用程序中的徽标。 invoice.logo.url=http://localhost:4200/assets/gfx/img/logos/rkmteam-logo.png 该图像不会显示在PDF中,但当我将其上载到imgur时。com,那么它工作得很好。 手动访问url有时会显示图片,但有时会给我这个错误: 如何访问外部应用程

  • 我有产品的图像。我想在JSP中用html标记呈现这些图像。我把图像放在intellij IDEA的src/main/resources目录中。我正在创建war文件并将其部署到jboss服务器上。我尝试了很多路径来指定img标记的src属性,但都找不到image。我看到了一个解决方案,人们创建另一个servlet并将其本地路径传递给图像来呈现,但我只想用JSP来实现。所以问题是,我应该在哪里保存图像

  • 我试图使用一个自定义字体,我读到我想把字体放在资产/字体。我使用的是Android Studio,似乎我没有资产文件夹。所以我创造了一个。但当我将assets文件夹放在src/main中时,我的应用程序会崩溃。我使用这个代码来加载我的字体。 我做错了什么?

  • 我在我的android应用程序中有一个webview,加载的html文件在服务器上,但是我需要从应用程序的资产文件夹地址一些文件。我想问一下如何处理这些文件。 谢谢