Пытаясь разработать приложение для картона Google, я загрузил образец из официального sdk. Во внутреннем классе ImageLoaderTask (который он должен быть классом помощника для управления резьбом)Картонный образец, метод должен быть вызван из потока пользовательского интерфейса
class ImageLoaderTask extends AsyncTask<Pair<Uri, Options>, Void, Boolean> {
/**
* Reads the bitmap from disk in the background and waits until it's loaded by pano widget.
*/
@Override
protected Boolean doInBackground(Pair<Uri, Options>... fileInformation) {
Options panoOptions = null; // It's safe to use null VrPanoramaView.Options.
InputStream istr = null;
if (fileInformation == null || fileInformation.length < 1
|| fileInformation[0] == null || fileInformation[0].first == null) {
AssetManager assetManager = getAssets();
try {
istr = assetManager.open("andes.jpg");
panoOptions = new Options();
panoOptions.inputType = Options.TYPE_STEREO_OVER_UNDER;
} catch (IOException e) {
Log.e(TAG, "Could not decode default bitmap: " + e);
return false;
}
} else {
try {
istr = new FileInputStream(new File(fileInformation[0].first.getPath()));
panoOptions = fileInformation[0].second;
} catch (IOException e) {
Log.e(TAG, "Could not load file: " + e);
return false;
}
}
panoWidgetView.loadImageFromBitmap(BitmapFactory.decodeStream(istr), panoOptions);
try {
istr.close();
} catch (IOException e) {
Log.e(TAG, "Could not close input stream: " + e);
}
return true;
}
}
panoWidgetView является виджетом для панорамы, и он объявлен в деятельности, которая включает в себя этот внутренний класс. Но Android Studio дает мне эту ошибку: Метод loadImageFromBitmap должен вызываться из потока пользовательского интерфейса, в настоящее время выбранный поток является рабочим. Любое возможное решение?
Отлично. Спасибо, я не могу выполнить работу интерфейса в backgroud. – sgrumo
Точно! https://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute(Result) –