java - PNG图像从java服务器到android

标签 java android

我正在尝试将多个 PNG: 发送到 android 手机。 (每个图像都以单独的 JSON 对象以及与该图像关联的多个其他对象一起发送。) 我以字节数组的形式发送图像,我的手机正在接收它们。 当我尝试使用返回 nullBitmapFactory.decodeByteArray 进行解码时,问题就开始了。 我应该如何在服务器端编码并在android端解码?

服务器端的第一次尝试:

File imgPath = new File(path);
BufferedImage bufferedImage = ImageIO.read(imgPath);
WritableRaster raster = bufferedImage.getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
byte[] bytes = data.getData();

服务器端的第二次尝试:

byte[] bytes = null;    
File file = new File(path);
bytes =  Files.readAllBytes(file.toPath());

Android端:

Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
mImageView.setImageBitmap(bitmap);

从服务器发送 JSON:

public class Response {
    List<Person> mPeople;
    ..other objects...
}

public class Person {
    String name;
    String image; //base68string
}

public ServerThread {
    Response resp = create objects to send;      
    String str = new Gson().toJson(resp);
    OutputStreamWriter.write(str);
}

Android端接收JSON:

Response resp = gson.fromJson(str, Response.class);
List<Person> = resp.getPersons();
//Person-class on the android side is Parcable

所以我尝试了这种方法,但仍然不起作用:

 // Server-side
import java.util.Base64;
import java.util.Base64.Encoder;
File file = new File(path);
byte[] bytes =  Files.readAllBytes(file.toPath());
Encoder e = Base64.getEncoder();    
String base64String = e.encodeToString(bytes);

//Android-side
byte[] bytes = Base64.decode(base64String, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
mImageView.setImageBitmap(bitmap);

最佳答案

我建议你尝试PicassoGlide直接从 URL 将图像加载到 imageview 中。您不必手动管理所有这些内容。

我正在做那些事情,但是在使用这个库之一之后,它消除了很多工作。

试试这个。

关于java - PNG图像从java服务器到android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41507972/

相关文章:

java - Jersey 重用子资源参数验证

java - 将 XHTML 文件中的 PDF 文件附加到电子邮件

android - Kotlin Flow - 有没有类似于 LiveData 的 emitSource 的东西?

android - 找不到属性android :font for v7 support

java - mysql 设置数据类型列到 java 集映射

java - 使用JPA实现RepositoryCustom的问题

java - RxJava : Why retryWhen/repeatWhen doesn't work?

java - 哪种方法可以快速编译 Ginger Bread 源代码?

android - 如何更改 android 的叠加标记?

android - 重复更新 ListFragment 中的列表