可能尚未为AssetManager Drawable初始化局部变量

时间:2013-05-14 20:13:49

标签: java android drawable

我有一个类,我试图在Android应用程序中使用AssetManager读取图像。我必须在另一个类中调用此类。

import android.app.Activity;
import android.content.res.AssetManager;
import android.graphics.drawable.Drawable;
import android.util.Log;

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

public class AssetActivity extends Activity {
    private static final String TAG = "AssetActivity";

    public Drawable getImage(String imgName) {
        AssetManager assets = getAssets(); // get app's AssetManager
        InputStream stream; // used to read in Image images
        String nextImageName = imgName;
        Drawable flag;
        try {
            // get an InputStream to the asset representing the next Image
            stream = assets.open(nextImageName + ".jpg");

            // load the asset as a Drawable and display on the objImageView
             flag = Drawable.createFromStream(stream, nextImageName);
        } // end try
        catch (IOException e) {
            Log.e(TAG, "Error loading " + nextImageName, e);
        } // end catch
        return flag;
    }}

我收到错误本地变量标志可能尚未初始化。 请告诉我如何避免这个错误。非常感谢。

3 个答案:

答案 0 :(得分:2)

你需要给它一些默认值,因为JVM不能确定

flag = Drawable.createFromStream(stream, nextImageName);

行被执行。因此,当您尝试使用它时,该值可能未定义。

例如,您可以像这样声明:

Drawable flag = null;

答案 1 :(得分:1)

您需要设置带有初始值的变量标志,可以为null。

如果存在异常,则不会在try块中设置该值,因为编译器会投诉。

答案 2 :(得分:0)

你这样做:

return flag;

如果发生异常,则抓住它,但继续执行。在这种情况下,flag尚未初始化:

catch (IOException e) {
    Log.e(TAG, "Error loading " + nextImageName, e);
} // end catch
return flag; // <-------------- here an uninitialized flag is returned
             //                 if an exception occured