当前位置: 首页 > 知识库问答 >
问题:

在java和android中,如何将位图从服务发送到主机?

壤驷穆冉
2023-03-14

我在我的应用程序中做了一个服务来下载图像,这对我来说还不清楚如何将结果(位图)从服务发送到主要活动。我可以那样做吗?或者在服务中,只有一个可能性来保存下载的图像在某个地方,只发送无用的消息?

共有2个答案

翁昊乾
2023-03-14

Bitmap实现了Parcelable,因此您可以随时传递它:

Intent intent = new Intent(this, NewActivity.class);
intent.putExtra("BitmapImage", bitmap);

然后在另一端取回它:

Intent intent = getIntent();
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");

如果位图作为文件或资源存在,则最好传递位图的URI或ResourceID,而不是位图本身。传递整个位图需要大量内存。传递URL只需要很少的内存,并允许每个活动根据需要加载和缩放位图。

回答拔出:如何将位图对象从一个活动传递到另一个活动

魏臻
2023-03-14

尝试从活动绑定到服务,然后将活动的实例传递给服务。在这种情况下,您可以将位图从服务传递给活动。但是,你需要非常小心,不要引入内存泄漏

比如:

class TestActivity extends Activity {
    private BitmapService mBitmapService;
    private final ServiceConnection mServiceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName,
                                       IBinder iBinder) {
            BitmapService.BitmapServiceBinder mBinder = (BitmapService.BitmapServiceBinder) iBinder;
            mBitmapService = mBinder.getBitmapService();
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
        }
    };

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        bindService(new Intent(this, XMLDownloaderService.class), mServiceConnection, BIND_AUTO_CREATE);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbindService(this.mServiceConnection);
    }
}

你的服务方:

public class BitmapService extends BitmapService {

    public class BitmapServiceBinder extends Binder {
        public BitmapService getBitmapService() {
             return BitmapService.this;
        }
    }

     public BitmapService() {
        super("BitmapService");
     }

     @Override
     public IBinder onBind(Intent intent) {
         return mBinder;
     }

     @Override
     public void onCreate() {
          super.onCreate();
           if (mBinder == null) {
               mBinder = new BitmapServiceBinder();
           }
     }
}
 类似资料:
  • 问题内容: 我想使用Android将数据发送到我的php页面。我该怎么做? 问题答案: 您可以使用AndroidHttpClient进行GET或POST请求: 创建一个AndroidHttpClient来执行您的请求。 创建一个HttpGet或HttpPost请求。 使用setEntity和setHeader]方法填充请求。 对您的请求使用客户端上的execute方法之一。

  • 在我的应用程序中,我试图将数据从我的发送到一个名为的服务。这是我的以下代码: MainActivity.class: BGS服务。课程: 但我没有在服务类中获取数据。以下是我得到的错误: 02-25 09:05:41.166:E/AndroidRuntime(2633): JAVAlang.RuntimeException:无法启动活动 组件信息{com.microapple.googleplac

  • 我正在Java上实现一个Restful Web服务,没有框架。我的想法是从文件服务器发送图像,因为将图像存储在数据库中会降低服务器的速度。目前,我有以下返回json内容的代码: 想法?提前谢谢。

  • 问题内容: 我正在尝试使用HttpUrlConnection将图像发送到服务器,因为它是Google推荐的。我决定将图像转换为Base64字符串,然后将其发送到服务器,然后将其解码为.jpg文件。但是这种方法仅适用于小尺寸缩略图,而我无法发送全尺寸图像。 这是android客户端代码: Node.js服务器代码: 由于BufferedWriter的大小限制,我无法对完整尺寸的图像使用相同的方法-b

  • 问题内容: 我有一个生成图像的Java Applet。最终,我想将图像数据插入数据库中,因此我想将图像数据临时存储在包含小程序的页面上的表单字段中。我希望在不将图像文件存储在客户端计算机上的情况下执行此操作。 所有这些都来自签名板。这是一些应该从sigObj对象中存储的矢量数据生成位图图像的代码: image变量是BufferedImage对象。另外,如果我只是将图像变量发送回我的JavaScri

  • 在我的代码中,我通过java套接字将图像从PC传输到手机。一切正常,图片保存到手机上,没有问题。但问题出现了,有没有可能在屏幕上显示图像而不保存? 服务器代码: 客户端代码: