package com.example.ex_day00;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import org.apache.http.util.ByteArrayBuffer;
import org.apache.http.util.EncodingUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.transition.Visibility;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
public class MainActivity extends Activity implements OnClickListener {
String path = "http://192.168.56.1:8080/abc.txt";
ArrayList<RuanJian> ruanjian = new ArrayList<RuanJian>();
MyAsyncTask myAsyncTask;
ListView listview;
HashMap<String, Bitmap> hashBit = new HashMap<String,Bitmap>();
HashMap<String,MyAsyncTask2> myasync = new HashMap<String,MyAsyncTask2>();
EditText chongshi;
ProgressBar progressbar;
Button button;
private MyAdaper myAdaper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listView1);
progressbar = (ProgressBar)findViewById(R.id.progressBar1);
chongshi = (EditText)findViewById(R.id.chongshi);
button = (Button)findViewById(R.id.button1);
button.setOnClickListener(this);
download();
}
private void download() {
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute(path);
myAdaper = new MyAdaper();
listview.setAdapter(myAdaper);
}
class MyAsyncTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
ByteArrayBuffer arrayBuffer = new ByteArrayBuffer(50);
try {
URL url = new URL(params[0]);
URLConnection openConnection = url.openConnection();
openConnection.setConnectTimeout(3000);
openConnection.setReadTimeout(3000);
InputStream inputStream = openConnection.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len = inputStream.read(buffer)) !=-1)
{
arrayBuffer.append(buffer, 0, len);
}
} catch (MalformedURLException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
chongshi.setText("读取失败1");
button.setVisibility(Button.VISIBLE);
progressbar.setVisibility(View.INVISIBLE);
}
});
e.printStackTrace();
} catch (IOException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
chongshi.setText("网络连接异常1");
button.setVisibility(Button.VISIBLE);
progressbar.setVisibility(View.INVISIBLE);
}
});
e.printStackTrace();
}
return new String(arrayBuffer.toByteArray());
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
new MyAsyncTask3().execute(result);
}
}
class MyAsyncTask3 extends AsyncTask<String, Void, Void>
{
@Override
protected Void doInBackground(String... params) {
try {
JSONArray array = new JSONArray(params[0]);
for (int i = 0; i < array.length(); i++) {
JSONObject jsonObject = array.getJSONObject(i);
String name = jsonObject.getString("name");
String desc = jsonObject.getString("desc");
String imagepath = jsonObject.getString("imagepath");
ruanjian.add(new RuanJian(name, desc, imagepath));
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
runOnUiThread(new Runnable() {
public void run() {
myAdaper.notifyDataSetChanged();
}
}); return null;
}
}
class MyAsyncTask2 extends AsyncTask<String, Void, Bitmap> {
private ImageView imageview;
int position;
public MyAsyncTask2(ImageView imageview,int position) {
this.imageview = imageview;
this.position = position;
}
@Override
protected Bitmap doInBackground(String... params) {
Bitmap bitmap = null;
try {
URL url = new URL(params[0]);
URLConnection openConnection = url.openConnection();
openConnection.setConnectTimeout(3000);
openConnection.setReadTimeout(3000);
InputStream is = openConnection.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
hashBit.put(params[0], bitmap);
} catch (MalformedURLException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
chongshi.setText("读取失败2");
}
});
e.printStackTrace();
} catch (Exception e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
chongshi.setText("网络连接异常2");
}
});
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
if (listview.getFirstVisiblePosition()<=position &&listview.getLastVisiblePosition()>=position)
{
imageview.setImageBitmap(result);
}
progressbar.setVisibility(ProgressBar.GONE);
chongshi.setVisibility(EditText.GONE);
super.onPostExecute(result);
}
}
class MyAdaper extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return ruanjian.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
RuanJian ruanJian2 = ruanjian.get(position);
LayoutInflater layoutInflater = getLayoutInflater();
View inflate = null;
User user = new User();
if (convertView==null) {
inflate = layoutInflater.inflate(R.layout.itemp, null);
user.imageview = (ImageView) inflate.findViewById(R.id.imageView1);
user.et1 = (EditText) inflate.findViewById(R.id.editText1);
user.et2 = (EditText) inflate.findViewById(R.id.editText2);
inflate.setTag(user);
}else
{
inflate = convertView;
user = (User)inflate.getTag();
}
user.et1.setText(ruanJian2.name);
user.et2.setText(ruanJian2.desc);
user.imageview.setImageResource(R.drawable.ic_launcher);
Bitmap bit = hashBit.get(ruanJian2.imagepath);
if (bit == null) {
MyAsyncTask2 task2 = myasync.get(ruanJian2.imagepath);
if(task2==null)
{
MyAsyncTask2 myAsyncTask2 = new MyAsyncTask2(user.imageview,position);
myasync.put(ruanJian2.imagepath, myAsyncTask2);
myAsyncTask2.execute(ruanJian2.imagepath);
}
}else
{
user.imageview.setImageBitmap(bit);
}
return inflate;
}
}
class User
{
ImageView imageview;
EditText et1;
EditText et2;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
btn_01();
break;
default:
break;
}
}
private void btn_01() {
download();
button.setVisibility(Button.INVISIBLE);
progressbar.setVisibility(ProgressBar.VISIBLE);
chongshi.setText("正在加载");
}
}