0

我想将图像显示为从 servlet 到 android 应用程序的布尔值。Servlet 将被上传到谷歌应用引擎。这是我的小服务程序。“arrBool”值显示为一些随机值。

//

    resp.setContentType("text/plain");

    if (req.getParameterMap().containsKey("message"))
        message = req.getParameter("message");

    resp.getWriter().println("Server Said" + message);




    for (int i=0; i<arrBool.length; i++) {
        arrBool[i] = r.nextBoolean();
            if(arrBool[i]==true) {
                resp.getWriter().print(arrBool);
            }
    }

这是我的 android 应用程序文件:

//

RestClient client = new RestClient("http://machougul01.appspot.com/listenforrestclient");
        client.AddParam("message", "Hello two World");
//        client.AddParam("arrBool", "textView1");


    try
    {
        client.Execute(RequestMethod.GET);

    }
    catch (Exception e)
    {
        textView.setText(e.getMessage());
    }

    String response = client.getResponse();
    textView.setText(response);
}

输出显示“服务器说:Hello two world”和 arrBool 值:“m9a9990a m9a9990” 我想将 arrBool 值设置为图像而不是 m9a9990a。因此,无论何时选择随机值(如果为真),那么汽车的数量将显示为 1 - 6 (共 6 辆)。请帮我解决这个问题。

4

2 回答 2

0

你有几件事需要做。

首先,您需要一些导入语句。也许您可以将 apache commons 用于 base64,此示例使用 xerces。

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

接下来,您需要使用布尔值创建图像:

BufferedImage image = new BufferedImage(wid,hgt,BufferedImage.TYPE_3BYTE_RGB);

final int BLACK = java.awt.Color.BLACK.getRGB();
final int WHITE = java.awt.Color.WHITE.getRGB();
for(int x = 0; x < wid; x++) {
    for(int y = 0; y < hgt; y++) {
        boolean val = array[x*wid + y];
        image.setRGB(x,y, val ? BLACK : WHITE);
    }
}

我可能在那里使用了二进制图像。这就是我临时知道的:) 我相信你可以修改它来改变格式。

然后你需要将它转换为Base64

ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] bytes = out.toByteArray();
String imageText = Base64.encode(baos.toByteArray());

然后,您需要吐出一些引用该 base 64 的 HTML:

String html = "<img src=\"data:image/bmp;" + imageText + "\" alt=\"Random booleans\">";

并在您的页面上吐出该 html,您应该一切就绪!

于 2012-12-05T16:20:55.433 回答
0

尝试改变

resp.getWriter().print(arrBool);

resp.getWriter().print(String.valueOf(arrBool));

它将在您的响应中写入一个字符串。

或者你可以改变这个

for (int i=0; i<arrBool.length; i++) {
        arrBool[i] = r.nextBoolean();
            if(arrBool[i]==true) {
                resp.getWriter().print(arrBool);
            }
    }

for (int i=0; i<arrBool.length; i++) {
        arrBool[i] = r.nextBoolean();
            if(arrBool[i]==true) {
                resp.getWriter().print(1);
            }
    }

因此,当您在客户端阅读响应时,您将收到响应行“服务器说:Hello two world”111

然后,您可以解析字符串并且没有 1 或 true 输出并显示或

于 2012-12-05T06:12:21.823 回答