80,337
社区成员
发帖
与我相关
我的任务
分享
public class MapDownActivity extends Activity {
private ListView list;
private static final String Path = "http://192.168.1.125:8080/MapServer/mapServer.do?para=getMapList";
private MapListAdapter adapter;
private ProgressBar pb;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pb = (ProgressBar) findViewById(R.id.progressBar);
pb.setMax(100);
pb.setVisibility(View.INVISIBLE);
adapter = new MapListAdapter(this, getData(),pb,getApplicationContext());
list = (ListView) findViewById(R.id.listView1);
list.setAdapter(adapter);
}
private List<MapListItem> getData() {
//节省空间,这里是获取数据的
}
}
public class MapListAdapter extends BaseAdapter {
Activity a;
List<MapListItem> values;
MapListControlHandler handler;
private ProgressBar pb;
private Context context;
public MapListAdapter(Activity a, List<MapListItem> values,
ProgressBar pb,Context context) {
this.a = a;
this.values = values;
this.pb = pb;
this.context=context;
}
public void addItem(MapListItem item) {
values.add(item);
}
@Override
public int getCount() {
return values.size();
}
@Override
public MapListItem getItem(int arg0) {
return values.get(arg0);
}
public void setItem(MapListItem item, int arg0) {
values.set(arg0, item);
notifyDataSetChanged();
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = a.getLayoutInflater().inflate(R.layout.maplist, null);
TextView tv1 = (TextView) view.findViewById(R.id.mapname);
tv1.setText(values.get(position).getName());
TextView tv2 = (TextView) view.findViewById(R.id.downtext);
tv2.setText(values.get(position).getStatus());
//这样会生成很多handler吧,不知道是不是这儿出的问题
handler=new MapListControlHandler(pb, context);
handler.setItem(values.get(position));
handler.setAdapter(this);
handler.setPosition(position);
tv2.setOnClickListener(new MapDownOnClick(handler));
TextView tv3 = (TextView) view.findViewById(R.id.data);
tv3.setText(values.get(position).getDate());
TextView tv4 = (TextView) view.findViewById(R.id.updata);
tv4.setText(values.get(position).getPro());
return view;
}
}
public void handleMessage(Message msg) {
if (!Thread.currentThread().isInterrupted()) {
switch (msg.what) {
case 0:
Toast.makeText(context, "已加入下载队列", 1).show();
pb.setVisibility(View.VISIBLE);
break;
case 1:
pb.setProgress(msg.arg1);
break;
case 2:
pb.setProgress(100);
pb.setVisibility(View.INVISIBLE);
pb.setProgress(0);
item.setStatus("下载完成");
adapter.setItem(item, position);
break;
default:
break;
}
}
}
private void writeToDevice(String content, String name, Handler handler) {
Message message = new Message();
message.what = 0;
handler.sendMessage(message);
OutputStream outputStream;
int DownedFileLength = 0;
String savePathString = mapdir + name + ".000";
Log.i("下载文件------------>", name);
try {
File file = new File(savePathString);
if (!file.exists()) {
file.createNewFile();
}
outputStream = new FileOutputStream(file);
byte[] buffer = content.getBytes("ISO-8859-1");
int FileLength = buffer.length;
int count = 1024 * 4;
while (DownedFileLength < FileLength) {
if (DownedFileLength + count > FileLength)
count = FileLength - DownedFileLength;
outputStream.write(buffer, DownedFileLength, count);
message = new Message();
message.what = 1;
message.arg1 = (int) ((int) DownedFileLength * 100 / FileLength);
handler.sendMessage(message);
DownedFileLength += count;
}
outputStream.close();
message = new Message();
message.what = 2;
handler.sendMessage(message);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Thread thread = new Thread() {
public void run() {
new MapControl().downFile(handler);
}
};
thread.start();
case 1:
pb.setProgress(msg.arg1);
Log.i("Handler------------->", msg.arg1+"");
break;
handler.sendMessage(message);
Log.i("------------->", message.arg1+"");
DownedFileLength += count;
case 1:
pb.setProgress(msg.arg1);
Log.i("Handler------------->", msg.arg1+"");
break;
handler.sendMessage(message);
Log.i("------------->", message.arg1+"");
DownedFileLength += count;
while (DownedFileLength < FileLength) {
if (DownedFileLength + count > FileLength)
count = FileLength - DownedFileLength;
outputStream.write(buffer, DownedFileLength, count);
Log.i("cur DownedFileLength = ", DownedFileLength);
message = new Message();
message.what = 1;
message.arg1 = (int) ((int) DownedFileLength * 100 / FileLength);
handler.sendMessage(message);
DownedFileLength += count;
}