Day12_20140618_JSON_LISTVIEW_AsyncTask结合的案例

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("正在加载");

}


}

wKioL1OirC7jRqn-AAQbO58H8EY687.jpg

你可能感兴趣的:(import,package)