Android 기반 – Activity 간 데이터 전송(bitmap 및 맵 객체)
4115 단어 Android
첫째, HashMap 객체 전달
해시맵 자체는 클로너블, 서리라이저블, Intent 전달 시 바로 강하게 돌리면 된다.(@qcks 지적 감사)
Map params = new HashMap<>();
params.put("key", "value");
Intent intent = new Intent(app, Activity.class);
intent.putExtra("parmas",(Serializable)params);
2. 비트맵 전송
Intent를 통해서 보내지 말라고 한 번 강조해주세요.
2.1 로컬 자원은 R.id만 전달하고 Resource를 통해 해석한다.
2.2 SD카드에 있는 파일이면 Uri만 전달합니다.
2.3 네트워크 흐름이라면 먼저 로컬로 그림을 저장한 다음에 경로 Uri를 전달한다.
또한, Intent가 전달할 수 있는 데이터의 크기가 제한되어 있고 구체적인 수량은 제가 실제로 테스트한 적이 없습니다. ROOM이 설정한 APP의 최대 메모리와 관련이 있습니다. 인터넷에서 어떤 사람이 실제 코드 테스트를 했습니다. 주소:https://blog.csdn.net/wingichoy/article/details/50679322
당시의 작법 수준은 매우 low적이었다. 단지 프로젝트를 완성하기 위해 쓸 수 있는 방안을 만들었을 뿐이다. 나중에 보면 물의 일비였다.
더 이상 내려다볼 필요 없어, 이전의 오래된 방안은 정말 차마 볼 수가 없어~~
----------------------------------------나는 분할선 2018.8.20, ----------------------------------------------------------------------------
프로젝트를 할 때 2개의activity 사이에서 데이터를 전달하는 데 사용해야 한다. 이전에 한 것은 모두 문자열 같은 것들이었다. 결국 이번에는 오랫동안 렉이 걸려서 오후 내내 괴롭혔다.
첫 번째:비트맵 전달
이 문제는 매우 기이하다. (아마도 내 안드로이드 수준이 아직 부족할 것이다.) 잘못 보고하지 않을 것이다. 나는 버블이나 Intent의extral 영역으로bitmap을 직접 저장했는데, 결과적으로 운행할 때 각종 다운이 되고 각종 인터페이스가 혼란스럽다. (나는 매우 궁금하다.)검색해 보니 40k보다 큰 그림을 직접 전달할 수 없다고 하니 덕문포럼에서 이해법을 찾아보자.비트맵을byte 그룹으로 저장한 다음 Intent를 통해 전달하는 것입니다.
의
코드는 다음과 같습니다.
Bitmap bmp=((BitmapDrawable)order_con_pic.getDrawable()).getBitmap();
Intent intent=new Intent(OrderConfirm.this,ShowWebImageActivity.class);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte [] bitmapByte =baos.toByteArray();
intent.putExtra("bitmap", bitmapByte);
startActivity(intent);
그 중에서 첫 번째 행 코드는 이미지뷰에서 어떻게 그림을 얻을 수 있는지입니다. 이 문제도 뒤바뀌었습니다. setDrawingCacheEnabled를 사용해도 될 것 같습니다. 처음에 사용한 이 방법은activity 사이에bitmap을 직접 전달하기 때문에 실행할 때 오류가 발생했고 나중에 고친 후에 다시 시도하지 않았습니다.
먼저 new의 Byte Array Output Stream 흐름을 사용한 다음에 비트맵의compress 방법을 사용하여 데이터를byte로 압축하여 전송하면 된다.
다른 activity에서 찾을 수 있는 방법은 다음과 같습니다.
imageView = (ZoomableImageView) findViewById(R.id.show_webimage_imageview);
Intent intent=getIntent();
if(intent !=null)
{
byte [] bis=intent.getByteArrayExtra("bitmap");
Bitmap bitmap=BitmapFactory.decodeByteArray(bis, 0, bis.length);
imageView.setImageBitmap(bitmap);
}
바이트 배열을 꺼낸 후 BitmapFactory의 decodeByteArray 방법으로bitmap을 조합하면 됩니다.
여기에 저장된 코드가 하나 더 있습니다.
public void saveMyBitmap(String bitName,Bitmap mBitmap) throws IOException {
File f = new File("/sdcard/Note/" + bitName);
if(!f.exists())
f.mkdirs();// , file not found
f=new File("/sdcard/Note/"+bitName+".png");
f.createNewFile();
try {
FileOutputStream out = new FileOutputStream(f);
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
Log.i(TAG,e.toString());
}
}
2. 맵 객체 전송:
bundle로 캡슐화하기
Map data=orderlist.get(arg2-1);
SerializableMap tmpmap=new SerializableMap();
tmpmap.setMap(data);
bundle.putSerializable("orderinfo", tmpmap);
intent.putExtras(bundle);
이 SeralizableMap은 Serializable 인터페이스를 구현한 클래스입니다.
public class SerializableMap implements Serializable {
private Map map;
public Map getMap()
{
return map;
}
public void setMap(Map map)
{
this.map=map;
}
}
이렇게 해야만 맵의 대상을 버블에 던질 수 있고,
빼내는 방법:
Bundle bundle = getIntent().getExtras();
SerializableMap serializableMap = (SerializableMap) bundle
.get("orderinfo");
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.