0

我有一个类,我试图在 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;
    }}

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

4

3 回答 3

2

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

flag = Drawable.createFromStream(stream, nextImageName);

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

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

Drawable flag = null;
于 2013-05-14T20:15:09.910 回答
1

您需要使用初始值设置变量标志,可以为空。

如果出现异常,则不会在 try 块中设置该值,因为编译器会抱怨。

于 2013-05-14T20:17:26.223 回答
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
于 2013-05-14T20:16:15.777 回答