j2se 的開發如何跨到 android平臺,拿android讀取網絡數據爲例

android 的網絡層,其實就是 j2se 的網絡層操作 

 

方法就是,將j2se 的 mian 方法的業務 邏輯,放到 android  的 service 包中 ,建立service 類處理

 

網絡操作 一般都是  input流,output流

 

從input流中 讀到 byte[] data 數組,將byte[]data 按需要  變成相應的 文件 或者 String 類型

 

J2se 下 的一個 讀取 圖片 程序

package com.readpic;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;

public class ImageRequest {

	public static void main (String[] args){
		try {
			URL url = new URL("http://img.bimg.126.net/photo/yuQusUZdCYJpjpKT4WRmKA==/1408500783460964413.jpg");
			
			HttpURLConnection conn =(HttpURLConnection) url.openConnection();
			
			
			conn.setRequestMethod("GET");
			conn.setConnectTimeout(5*1000);
			
			InputStream inStream = conn.getInputStream();  //通過輸入流獲取 圖片數據
			
			
			byte[] data = readInputStream(inStream);// 得到圖片的 二進制數據
			
			File imageFile = new File("itcast.jpg");
			FileOutputStream outStream =new FileOutputStream(imageFile);
			outStream.write(data);
			outStream.close();
			
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	
	
	/*
	 * 讀入二進制 數據
	 */
	public static byte[] readInputStream (InputStream inStream) throws IOException {
		
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		byte[] buffer = new byte [1024];
		int len =0;
		
	
			while ((len=inStream.read(buffer))!= -1){
				
				outStream.write(buffer,0,len);
			}

			inStream.close();
	
		return outStream.toByteArray();
	}
}


 

這麼做就會 在項目文件夾中 讀到一個 圖片

 

 

2.將業務邏輯移植到 android中

 

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/urlpath" />
    
    <EditText
        android:id="@+id/urlpath"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="http://img.bimg.126.net/photo/yuQusUZdCYJpjpKT4WRmKA==/1408500783460964413.jpg" />
    
    
       
    <Button
        
        android:id="@+id/button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/button" 
        />
    
    
  
     <ImageView
         
      android:id="@+id/imageview"   
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/urlpath" />
    
    
  

</LinearLayout>


 

建立 工具包 unitl

放入專門 讀入二進制文件代碼

package com.zgd.utils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class StreamTool {
	
	
	
	
	/*
	 * 讀入二進制 數據
	 */
	public static byte[] readInputStream (InputStream inStream) throws IOException {
		
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		byte[] buffer = new byte [1024];
		int len =0;
		
	
			while ((len=inStream.read(buffer))!= -1){
				
				outStream.write(buffer,0,len);
			}

			inStream.close();
	
		return outStream.toByteArray();
	}
}


service包

 

 

package com.zgd.service;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;

import java.net.URL;

import com.zgd.utils.StreamTool;

public class ImageService {
	
	public static byte[] GetImage(String path) throws IOException  {
		
		URL url = new URL("http://img.bimg.126.net/photo/yuQusUZdCYJpjpKT4WRmKA==/1408500783460964413.jpg");
		
		HttpURLConnection conn =(HttpURLConnection) url.openConnection();
		
		
		conn.setRequestMethod("GET");
		conn.setConnectTimeout(5*1000);
		
		InputStream inStream = conn.getInputStream();  //通過輸入流獲取 圖片數據
		
		 return StreamTool.readInputStream(inStream);
		
	
	}
}


Activity包

 

package com.zgd;

import java.io.IOException;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import com.zgd.service.ImageService;

public class ImageViewActivity extends Activity {
	
	private EditText pathText;
	private ImageView imageView;
	
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        pathText = (EditText) this.findViewById(R.id.urlpath);
        imageView = (ImageView) this.findViewById(R.id.imageview);
        
        Button bt=(Button) this.findViewById(R.id.button);
        
        bt.setOnClickListener(new View.OnClickListener() {
			
        	String path =pathText.getText().toString();
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				try {
					byte[] data = ImageService.GetImage(path);
					
					Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);//生成位圖
					imageView.setImageBitmap(bitmap);//顯示圖片
					
				} catch (IOException e) {
					// TODO Auto-generated catch block
					Toast.makeText(ImageViewActivity.this, R.string.error, 1).show();
					
//					Log.e();
				}
				
				
			}
        	
        });
    }
}


4. 開啓 mainfiest.xml中 的權限

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章