一个android电子商城下载的难题

zxciop110 2012-07-23 05:41:19
公司目前有个项目类似 google play 基本功能都做好了 能取道数据也都解析出来了 但就是下载的功能和游戏名字不对应,我通俗讲吧 比如我点击的是愤怒小鸟的下载 但确下载的别的游戏,看代码 我给你们解释一下




WebHelper类不用我解释了 就是向服务器来解析数据的
参数什么的 重点在下面 红色部分 FOR语句我注释了
在里面有个OPT方法 有问题不能对应我点击的游戏

// 获取返回json报文
if (hr.getStatusLine().getStatusCode() == 200) {
jsonforString = EntityUtils.toString(hr.getEntity());
Log.d(TAG, jsonforString);
JSONObject jsonObject = new JSONObject(jsonforString.toString());
JSONArray jna = jsonObject.getJSONArray("data");
for (int i = 0; i < jna.length(); i++) {
GameInfo gamesCategory = new GameInfo();
JSONObject jb = (JSONObject) jna.opt(i);
gamesCategory.setName(jb.getString("name"));
gamesCategory.setTypeName(jb.getString("typename"));
gamesCategory.setLogo_url(jb.getString("logo_url"));
gamesCategory.setGameid(jb.getString("gameid"));
gamesCategory.setSourceScore(jb.getString("score"));
gamesCategory.setSize(jb.getString("size"));
JSONArray jna2 = jb.getJSONArray("download");
// for(int j = 0; j < jna2.length(); j++){
// int index= indexs+1;
JSONObject jb2 = (JSONObject) jna2.opt(0);//这个方法opt有问题
gamesCategory.setDownLoadFileUrl(jb2.getString("filename"));//下载的参数
// }

Log.d(TAG, "gamesCategory.toString()" + gamesCategory.toString());
gamesCategoryList.add(gamesCategory);
}








这里就是我点击的时候的事件 意思就是得到下载地址 看代码


//下面是相应的游戏下载地址url
fileUrl = info.getDownLoadFileUrl();//得到下载地址 这里我做了个封装
holder.btns .setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// DownedFileLength = 0;
holder.ratingBarScore.setVisibility(View.GONE);
holder.pro.setVisibility(View.VISIBLE);
holder.textView.setVisibility(View.VISIBLE);
Thread thread = new Thread(){
public void run(){
Log.v("ccf", "onClick");
try {
downLoadFile(fileUrl);//我把地址传进来了
openFile(new File("/sdcard/update/updata.apk"));
Toast.makeText(context, "开始下载"+fileUrl, 0).show();
// holder.btns.setBackgroundResource(R.drawable.way);

}catch (Exception e){
e.printStackTrace();
}

downLoadFile方法这里:其实不用多解释 基本没什么用处

protected File downLoadFile(String httpUrl) {
// TODO Auto-generated method stub
final String fileName = "updata.apk";
File tmpFile = new File("//sdcard//update");
if (!tmpFile.exists()) {
tmpFile.mkdir();
}
final File file = new File("//sdcard//update//" + fileName);

try {
URL url = new URL(httpUrl);
try {
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
InputStream is = conn.getInputStream();
// FileLength = conn.getContentLength();//根据响应得到大小
Log.v("wjp","FileLength"+FileLength );
// if(FileLength <=0)throw new RuntimeException("无法获取文件的大小");//获取文件大小
// Log.v("wjp","FileLengsss"+FileLength );
// if(is == null)throw new RuntimeException("stream is null");//null
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[1024];

//
conn.connect();
double count = 0;
if (conn.getResponseCode() >= 400) {
Toast.makeText(context, "出错", Toast.LENGTH_SHORT)
.show();
} else {
while (count <= 100) {
if (is != null) {
int numRead = is.read(buf);
if (numRead <=0) {
break;
} else {
fos.write(buf, 0, numRead);
// count +=numRead;

// sendMsg(1);//消息主要是更新进度条下载同步进行
}

} else {
break;
}

}
}

conn.disconnect();
fos.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block

e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block

e.printStackTrace();
}

return file;
}



能下载 就是不对应 我要下载这个游戏 它就给我下载别的游戏 还是在JSONObject jb2 = (JSONObject) jna2.opt(0);//这个方法opt 参数有问题
不知道怎么去解决了 要对用 同事说可能是gitView取的时候的问题 打印日志发现那个adapter最开始填充那些item的时候都出现了
而不是一条一条来的

分数不多了 就30积分了




[/code]
...全文
104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxciop110 2012-07-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

我记得以前的时候,数据量比较大的时候,在listview中有些图片的位置会不正确,和你的问题类似,但是我点击下载的时候,下载的地址是没有问题的,我觉得你还是多输出一些,看看输出信息,说不定是你取错了信息
[/Quote]

是的 我这边是用gridView来布局 你看一下google play就是他那样的布局 填充的数据影响到布局的展现 但问题不是很大 有解决办法 就是在后台修改一下文字 图片 等都统一大小
zxciop110 2012-07-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

我记得以前的时候,数据量比较大的时候,在listview中有些图片的位置会不正确,和你的问题类似,但是我点击下载的时候,下载的地址是没有问题的,我觉得你还是多输出一些,看看输出信息,说不定是你取错了信息
[/Quote]

OK 搞定了
首先定义:
final String gameName;
gameName = info.getName();


然后在触发事件的时候
final String downloadUrl =(String)v.getTag();
Thread thread = new Thread(){
public void run(){
Log.v("ccf", "onClick");
try {
downLoadFile(downloadUrl);
openFile(new File("/sdcard/update/updata.apk"));

}catch (Exception e){
e.printStackTrace();
}
}

深夜深几许 2012-07-23
  • 打赏
  • 举报
回复
我记得以前的时候,数据量比较大的时候,在listview中有些图片的位置会不正确,和你的问题类似,但是我点击下载的时候,下载的地址是没有问题的,我觉得你还是多输出一些,看看输出信息,说不定是你取错了信息
zxciop110 2012-07-23
  • 打赏
  • 举报
回复
这个项目做完后 我会发一部源码给大家学习

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧