Android-サーバ側からファイルを読み取り、画像コンテンツをダウンロード

11316 ワード

目次
 
ステップ1:ビューの作成が完了しました
ステップ2:ビューのバインド-activityの作成
ステップ3でAdapterを作成しますが、まずAdapterに必要なスタイルXMLを作成します.
ステップ4:Adapterの作成
ステップ5:servletのjsonファイル
ステップ6:ネットワーク権限とビューバインドの構成
/*の例:*1は、サービス側のjson情報をロードし、この情報はデータベースによって生成された*2であり、jsonに含まれる情報:Usersオブジェクト、このオブジェクトの属性:id、name、age、tupain*3、この4つの属性idは表示されず、nameとageはusersに格納できるが、画像には顔画像の名前*4が格納されている.また、この名前に基づいてスレッドを開いてダウンロード*5を行い、ダウンロード後に画像配列とusers配列をadapterに転送してlistview*に注入する手順:*servlet---->*スレッドを開いてjson---->*解析json---->*textメッセージをusersに保存することを定義します.画像の名前を保存する別の配列-->*名前を保存する配列に基づいて画像をダウンロードする-->*手書きでカスタマイズしたAdapterをダウンロードし、その前にスタイルxmlを書く-->*スタイルビューは画像ビューと2つのTextViewビューなので、BistBsersと1つのListBitmap-->*とコンテキストの3つのパラメータを加えなければなりません.*Adapterを書き終え、MaAdapterを定義してカスタマイズしたAdapteerを継承-->*ページでlistviewビューをこのフィラーにバインドします*/
ステップ1:ビューの作成が完了しました



    

        

        

        

    

    

    

    

    
    


ステップ2:ビューのバインド-activityの作成
package com.example.testloadimage;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import com.example.adapter.MyAdapter;
import com.example.entity.Users;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ListView;
import android.widget.Toast;

/*
 *   :
 * 1,      json  ,           
 * 2,json     :   Users  ,      :id,name,age,tupain
 * 3,     id      ,name age    users,               
 * 4,                    
 * 5,         users     adapter   listview
 * 
 *   :
 *     json servlet----->
 *       json----->
 *   json----->
 *  text    users,            ----->
 *              ----->
 *           Adapter,          xml----->
 *                 TextView  ,          BistBsers   ListBitmap----->
 *            ,
 *   Adapter      MaAdapter        Adapteer----->
 *           listview          
 */
public class TestActivity extends Activity{
	//    
	private Handler myHandler;
	//         
	private List lt;
	//     listview
	private ListView listview;
	//           
	private List bis = new ArrayList();
	//         ,    ,            
	private List load = new ArrayList();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		//    
		super.setContentView(R.layout.index);
		//           
		myHandler=new MyHandler();
		lt = new ArrayList();
		listview = (ListView)this.findViewById(R.id.listView1);

		//         ,   
		MyThread myThread = new MyThread();
		myThread.start();

	}

	//  json   
	class MyThread extends Thread{
		@Override
		public void run() {
			URL url;
			HttpURLConnection conn =null;
			try {
				//  json   
				url = new URL("http://192.168.1.103:8080/TestAndroid/Goods.json");
				conn = (HttpURLConnection)url.openConnection();
				//      ,         ,              
				conn.setDoInput(true);
				conn.setDoOutput(true);
				conn.setConnectTimeout(50000);
				//       json  
				InputStream is = conn.getInputStream();
				int data =0;
				String neirong = "";
				while((data = is.read())!=-1) {
					neirong+=(char)data;
				}
				//      , stringjson        json    
				JSONArray array = new JSONArray(neirong);
				System.out.println(neirong);

				for (int i = 0; i < array.length(); i++) {
					//              
					JSONObject obj = array.getJSONObject(i);
					//         
					int id = obj.getInt("id");
					String name = obj.getString("name");
					int age = obj.getInt("age");
					String tupian = obj.getString("tupian");
					//                ,    
					load.add(tupian);
					//       user  ,        
					Users users = new Users(id, name, age, tupian);
					lt.add(users);
				}
				//      json           ,         
				MyLoadThread loadThread = new MyLoadThread();
				loadThread.start();
				
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	//       
	class MyLoadThread extends Thread{
		@Override
		public void run() {
			//                   
			for (int i = 0; i < load.size(); i++) {
				try {
					//        ,               ,                 
					//                  
					URL url = new URL("http://192.168.1.103:8080/TestAndroid/"+load.get(i));
					System.out.println("loadtupian=====>"+url);
					
					HttpURLConnection conn = (HttpURLConnection)url.openConnection();

					conn.setDoInput(true);
					conn.setDoOutput(true);
					conn.setConnectTimeout(50000);
					
					//          ,                 
					InputStream is = conn.getInputStream();
					Bitmap bitmap = BitmapFactory.decodeStream(is);

					//                  ,              ,        Adapter
					bis.add(bitmap);

				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			//         ,         ,           listview 
			//      thread            ,                
			Message msg = new Message();
			TestActivity.this.myHandler.sendMessage(msg);
		}
	}

	//           ,                 
	class MyAdapter1 extends MyAdapter{
		public MyAdapter1(Context context, List lt, List bits) {
			super(context, lt, bits);
			// TODO Auto-generated constructor stub
		}
	}
	class MyHandler extends Handler{
		@Override
		public void handleMessage(Message msg) {
			//          listview Adapter  
			listview.setAdapter(new MyAdapter1(TestActivity.this, lt, bis));
		}
	}
}

ステップ3でAdapterを作成しますが、まずAdapterに必要なスタイルXMLを作成します.



    
    
	
    
    
	
    
    


ステップ4:Adapterの作成
package com.example.adapter;

import java.util.List;

import org.w3c.dom.Text;

import com.example.entity.Users;
import com.example.testloadimage.R;
import com.example.testloadimage.R.layout;

import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
/*
 *     Adapter   ,              ,          
 */
public class MyAdapter extends BaseAdapter{
	//   
	private Context context;
	//json       
	private List lt;
	//               
	private List bits;

	//    ,                     
	public MyAdapter(Context context, List lt, List bits) {
		super();
		this.context = context;
		this.lt = lt;
		this.bits = bits;
	}
	//  BaseAdapter         
	//          ,       lt       
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return lt.size();
	}
	//               :               
	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return lt.get(position);
	}
	//       
	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}
	//      ,      ,              ,      listview 
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		//     ,     ,Android           
		LayoutInflater inflater = LayoutInflater.from(context);
		//             ,       id
		View view = inflater.inflate(R.layout.title, null);
		
		//        ,          TextView ImageView
		TextView nameText = (TextView)view.findViewById(R.id.textView1);
		TextView ageText = (TextView)view.findViewById(R.id.textView2);
		ImageView tupain = (ImageView)view.findViewById(R.id.imageView1);
		
		//       ,           ,     text image     
		nameText.setText(lt.get(position).getName());
		ageText.setText(""+lt.get(position).getAge());
		//      bitmap  ,        
		tupain.setImageBitmap(bits.get(position));
		
		//        
		return view;
		
		
	}
	
}

ステップ5:servletのjsonファイル
[{"id":1,"name":"jin","age":22,"tupian":"jin1.jpg"},
{"id":2,"name":"qian","age":25,"tupian":"jin2.jpg"}]

ステップ6:ネットワーク権限とビューバインドの構成