我有一个类,我试图在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;
}}
我收到错误本地变量标志可能尚未初始化。 请告诉我如何避免这个错误。非常感谢。
答案 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