java中如何让byte[]与string类型转换后,保持不变 15

在android中我从网络(通过图片网址)上获得几张图片后,我想进入下一个activity时,把这几张图片传过去,可是我想以列表list传过去,可是android的act... 在android中我从网络(通过图片网址)上获得几张图片后,我想进入下一个activity时,把这几张图片传过去,可是我想以列表list传过去,可是android的activity中intent中只能传arrayList<string>类型,我想将得到的byte【】转换成string后传过去,但到那边不可以用了。public class AnroidTestActivity extends Activity {
private EditText imagePathText;
private static final String TAG="DataActivity";
private ImageView imageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imagePathText = (EditText) findViewById(R.id.editText1);
imageView=(ImageView)findViewById(R.id.imageView1);

//获取我的宝马车图片
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String path = imagePathText.getText().toString();
try {

byte[] data=NetTool.getImage(path);
System.out.println(data.length);
Bitmap bm=BitmapFactory.decodeByteArray(data, 0, data.length);
imageView.setImageBitmap(bm);
String string=bytesToString(data);

List<String>list=new ArrayList<String>();
list.add(string);
System.out.println("转换后得到的数据:"+list.get(0));
System.out.println("转换后得到的数据:"+list.get(0).length());
Intent intent=new Intent();
intent.putStringArrayListExtra("list", (ArrayList<String>) list);
intent.setClass(AnroidTestActivity.this,TestIntent.class);
startActivity(intent);
} catch (Exception e) {
Log.i(TAG, e.toString());
Toast.makeText(AnroidTestActivity.this, "获得图片失败", 1).show();
}
}
});

// 获取网页源代码

}
//将byte【】类型转换成string类型
public static String bytesToString(byte[] b) {
StringBuffer result = new StringBuffer("");
int length = b.length;
for (int i = 0; i < length; i++) {
result.append((char)(b[i] & 0xff));
}
return result.toString();
}
}
public class TestIntent extends Activity{
private ImageView imageView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
imageView=(ImageView)findViewById(R.id.test_imageView1);
Intent intent=getIntent();
List<String> list=new ArrayList<String>();
list=(ArrayList<String>)intent.getStringArrayListExtra("list");
System.out.println("转换后得到的数据:"+list.get(0));
System.out.println("转换后得到的数据:"+list.get(0).length());
byte[]data= list.get(0).getBytes();
System.out.println(data.length);
Bitmap bm=BitmapFactory.decodeByteArray(data, 0, data.length);
imageView.setImageBitmap(bm);
}
/** * 将String转为byte数组 */
// public static byte[] stringToBytes(String s, int length) {
// while (s.getBytes
//
// ().length < length) {
// s += "";
// }
// return s.getBytes();
// }
}
展开
 我来答
乌光QS
推荐于2018-04-13 · TA获得超过1365个赞
知道小有建树答主
回答量:464
采纳率:100%
帮助的人:458万
展开全部
String.getBytes()是取决于本地缺省编码的,两边不一样就抓瞎了。你这种情况其实是要传byte[],这样硬生生转成String总觉得太危险,一般的做法是弄成比如Base64这样的7bits编码。现成的有sun.misc.BASE64Encoder和sun.misc.BASE64Decoder。
追问
怎么用啊
追答
编码就是
byte[] bs = ...;
BASE64Encoder enc = new BASE64Encoder();
String s = enc.encodeBuffer(bs);
解码就是
String s = ...;
BASE64Decoder dec = new BASE64Decoder();
byte[] newbs = dec.decodeBuffer(s);
不过android下有没有这两个包我不知道,但是Base64的编码解码器源码网上不少,也不是很长,自己加也可以。
zmsinocom
2012-09-14
知道答主
回答量:1
采纳率:0%
帮助的人:1619
展开全部
建议不要转换成String,图片读取只用byte或者byte[]不会出错。
byte[]转换String时使用举例
byte[] bytes = new byte[]{(byte) 0x03,(byte) 0x04,};

String targetStr = new String(bytes, "UTF-8")
其中"UTF-8"是转码参数,不写的话会按系统默认转码,这就说明byte[]转换String时,
出现特殊字符,即半角英文 数字 半角符号以外的特殊字符,如汉字 特殊符号等时,
如果编码设定不对的话,二进制编码将无法保持一致。
代码中的方法public static String bytesToString(byte[] b) 应该一样存在这个问题。
追问
那应该如何通过intent的来传递图片呢?如果是一张图片可以用byte【】传,可我一次传几张怎么做呀?
追答
你的问题我不是很清楚,你的意思是一次选取多个图形文件传输么?
如果是这个意思的话,有两种办法:
第一种,以单独传送图片的机制 循环发送。
第二种,传送时每个文件中间加特殊分割字段,类似于大型机数据的“数据头”。这时需要接受方有一样的解析方式,按照数据头分割文件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_446865422
2012-09-17 · TA获得超过229个赞
知道小有建树答主
回答量:320
采纳率:0%
帮助的人:162万
展开全部
只是一个思路,你在这个Activity里把流转换成Bitmap,再放到集合里,传过去。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式