私のAndroidアプリケーションでは、カメラの意図を介して画像を取得し、Parse.comに保存して、ParseImageViewを使用して別のアクティビティに表示します。私が直面した問題は、エミュレーターでコードを試すと正常に動作することですが、Samsung Galaxy S4 KitKat 4.4.2 では画像が読み込まれず、その理由がわかりませんでした。S4にロードされたエミュレートされたカメラParseImageViewを使用してエミュレータから写真を撮ると。PCからParse.comインターフェースで見ることができるので、写真は問題なく保存されます。それは私のコードまたは解析に関するものですか、それともデバイスの可能性がありますか?
カスタム ParseQueryAdapter
public class CustomImageAdapter extends ParseQueryAdapter<ParseObject> {
String tableName,columnName,whereColumn,whereValue;
private static final int LOW_DPI_STATUS_BAR_HEIGHT = 19;
private static final int MEDIUM_DPI_STATUS_BAR_HEIGHT = 25;
private static final int HIGH_DPI_STATUS_BAR_HEIGHT = 38;
public CustomImageAdapter(Context context, final String tableName, final String columnName, final String whereColumn, final String whereValue) {
super(context, new QueryFactory<ParseObject>() {
public ParseQuery create() {
ParseQuery query = new ParseQuery(tableName);
query.setLimit(1000);
query.orderByAscending(columnName);
query.whereEqualTo(whereColumn,whereValue);
return query;
}
});
this.tableName=tableName;
this.columnName=columnName;
this.whereColumn=whereColumn;
this.whereValue=whereValue;
}
// Customize the layout by overriding getItemView
@Override
public View getItemView(ParseObject object, View v, ViewGroup parent) {
if (v == null) {
v = View.inflate(getContext(), R.layout.lay_custom_image_adapter, null);
}
super.getItemView(object, v, parent);
ParseImageView image = (ParseImageView) v.findViewById(R.id.icon);
DisplayMetrics displayMetrics = new DisplayMetrics();
((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(displayMetrics);
int statusBarHeight;
switch (displayMetrics.densityDpi) {
case DisplayMetrics.DENSITY_HIGH:
statusBarHeight = HIGH_DPI_STATUS_BAR_HEIGHT;
break;
case DisplayMetrics.DENSITY_MEDIUM:
statusBarHeight = MEDIUM_DPI_STATUS_BAR_HEIGHT;
break;
case DisplayMetrics.DENSITY_LOW:
statusBarHeight = LOW_DPI_STATUS_BAR_HEIGHT;
break;
default:
statusBarHeight = MEDIUM_DPI_STATUS_BAR_HEIGHT;
}
WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y-(statusBarHeight*9);
Log.d("Test", statusBarHeight + "");
LinearLayout.LayoutParams layParam=new LinearLayout.LayoutParams(width,height);
image.setLayoutParams(layParam);
if(image.getRotation()!=90){
image.setRotation(90);
}
final ParseFile photoFile = object.getParseFile("file");
if (photoFile != null) {
image.setParseFile(photoFile);
image.loadInBackground(new GetDataCallback() {
@Override
public void done(byte[] data, ParseException e) {
// nothing to do
if(e!=null){
Toast.makeText(getContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getContext(),"e=null",Toast.LENGTH_SHORT).show();
}
}
});
}
else{
Toast.makeText(getContext(),"photofile=null",Toast.LENGTH_SHORT).show();
}
return v;
}
方法
public void loadImage(){
customImageAdapter=new CustomImageAdapter(getActivity().getApplicationContext(),tableName,columnName,whereColumn,whereValue);
customImageAdapter.setPaginationEnabled(false);
customImageAdapter.loadObjects();
customImageAdapter.addOnQueryLoadListener(new ParseQueryAdapter.OnQueryLoadListener<ParseObject>() {
@Override
public void onLoading() {
mProgressDialog= new ProgressDialog(getActivity());
mProgressDialog.setTitle("Loading");
mProgressDialog.setMessage("Please Wait");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
public void onLoaded(List<ParseObject> parseObjects, Exception e) {
if(e!=null) {
Log.d("Test", e.getMessage());
}
mProgressDialog.dismiss();
}
});
npLvPreview.setAdapter(customImageAdapter);
}
もう1つのことは、ProgressDialogもエミュレータとデバイスの両方に表示されないことです。