首页 > 代码库 > Android客户端单线程下载

Android客户端单线程下载

技术分享

具体效果如上图所示,具体操作步骤如:

1、先新建一个工程名为getDataInternet的应用;

2、修改res/values中的string.xml文件,具体代码如下:

 1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3  4     <string name="app_name">Android客户端单线程下载</string> 5     <string name="hello_world">Hello world!</string> 6     <string name="action_settings">Settings</string> 7     <string name="path">图片路径</string> 8     <string name="getBtnValue">获取图片</string> 9 10 </resources>

3、编写res/Layout中的fragment_main.xml文件,具体代码如下:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" 3     android:layout_width="match_parent" 4     android:layout_height="match_parent" 5     android:paddingBottom="@dimen/activity_vertical_margin" 6     android:paddingLeft="@dimen/activity_horizontal_margin" 7     android:paddingRight="@dimen/activity_horizontal_margin" 8     android:paddingTop="@dimen/activity_vertical_margin" 9     tools:context="com.example.getdatatointernet.MainActivity$PlaceholderFragment" >10 11     <LinearLayout 12         android:layout_width="fill_parent"13         android:layout_height="fill_parent"14         android:orientation="vertical"15         >16         <TextView 17             android:layout_width="fill_parent"18             android:layout_height="wrap_content"19             android:text="@string/path"20             />21         <EditText 22             android:layout_width="fill_parent"23             android:layout_height="wrap_content"24             android:text="http://b.hiphotos.baidu.com/image/pic/item/1ad5ad6eddc451da70d0dc8db4fd5266d01632b6.jpg"25             android:id="@+id/path"26             />27         <Button 28             android:layout_width="wrap_content"29             android:layout_height="wrap_content"30             android:text="@string/getBtnValue"31             android:id="@+id/sendBtn"32             />33         <ImageView 34             android:layout_width="wrap_content"35             android:layout_height="wrap_content"36             android:id="@+id/imageView"37             />38     </LinearLayout>39 40 </RelativeLayout>

4、编写NetTool.java类,该类用于操作图片的下载,具体代码如下:

技术分享
 1 package com.example.getdatatointernet; 2  3 import java.io.ByteArrayOutputStream; 4 import java.io.InputStream; 5 import java.net.HttpURLConnection; 6 import java.net.URL; 7  8 public class NetTool { 9 10     public static byte[] getImage(String path) throws Exception{11         //简历URL路径12         URL url=new URL(path);13         14         //得到HttpURLConnection对象15         HttpURLConnection conn=(HttpURLConnection)url.openConnection();16         conn.setRequestMethod("GET");//声明请求方式17         conn.setConnectTimeout(6*1000);//设置链接超时18         int a=conn.getResponseCode();19         if(conn.getResponseCode()==200)20         {21             InputStream iStream=conn.getInputStream();//得到输入流22             return readInstream(iStream);//返回得到的输入流23         }24         25         return null;26     }27     28     //读取文件流的内容29     public static byte[] readInstream(InputStream inputStream) throws Exception{30         //创建ByteArrayOutputStream类31         ByteArrayOutputStream baoStream=new ByteArrayOutputStream();32         byte[] buffer=new byte[1024];//声明缓冲区33         int length=-1;//定义读取默认的长度34         while((length=inputStream.read(buffer))!=-1){35             baoStream.write(buffer,0,length);//把缓冲区中输出到内存中36         }37         38         baoStream.close();//关闭输出流39         inputStream.close();//关闭输入流40         return baoStream.toByteArray();//返回输出流的字节数组41     }42 }
View Code

5、编写核心代码MainActivity.java类,具体代码如下:

技术分享
  1 package com.example.getdatatointernet;  2   3 import android.annotation.SuppressLint;  4 import android.graphics.Bitmap;  5 import android.graphics.BitmapFactory;  6 import android.os.Bundle;  7 import android.os.StrictMode;  8 import android.support.v4.app.Fragment;  9 import android.support.v7.app.ActionBarActivity; 10 import android.util.Log; 11 import android.view.LayoutInflater; 12 import android.view.Menu; 13 import android.view.MenuItem; 14 import android.view.View; 15 import android.view.ViewGroup; 16 import android.widget.Button; 17 import android.widget.EditText; 18 import android.widget.ImageView; 19 import android.widget.Toast; 20  21 @SuppressLint("ValidFragment") 22 public class MainActivity extends ActionBarActivity { 23  24     @Override 25     protected void onCreate(Bundle savedInstanceState) { 26         super.onCreate(savedInstanceState); 27         setContentView(R.layout.activity_main); 28  29         if (savedInstanceState == null) { 30             getSupportFragmentManager().beginTransaction() 31                     .add(R.id.container, new PlaceholderFragment()).commit(); 32         } 33     } 34  35     @Override 36     public boolean onCreateOptionsMenu(Menu menu) { 37  38         // Inflate the menu; this adds items to the action bar if it is present. 39         getMenuInflater().inflate(R.menu.main, menu); 40         return true; 41     } 42  43     @Override 44     public boolean onOptionsItemSelected(MenuItem item) { 45         // Handle action bar item clicks here. The action bar will 46         // automatically handle clicks on the Home/Up button, so long 47         // as you specify a parent activity in AndroidManifest.xml. 48         int id = item.getItemId(); 49         if (id == R.id.action_settings) { 50             return true; 51         } 52         return super.onOptionsItemSelected(item); 53     } 54  55     /** 56      * A placeholder fragment containing a simple view. 57      */ 58     public  class PlaceholderFragment extends Fragment { 59  60         public PlaceholderFragment() { 61         } 62  63         @Override 64         public View onCreateView(LayoutInflater inflater, ViewGroup container, 65                 Bundle savedInstanceState) { 66             View rootView = inflater.inflate(R.layout.fragment_main, container, 67                     false); 68              69             StrictMode.setThreadPolicy(new  70                      StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build()); 71                              StrictMode.setVmPolicy( 72                      new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build()); 73  74             final EditText imageText=(EditText)rootView.findViewById(R.id.path); 75             final ImageView imageView=(ImageView)rootView.findViewById(R.id.imageView); 76             final Button btn=(Button)rootView.findViewById(R.id.sendBtn); 77              78             btn.setOnClickListener(new View.OnClickListener() { 79                  80                 @Override 81                 public void onClick(View v) { 82                     // TODO Auto-generated method stub 83                     String path=imageText.getText().toString(); 84                     try 85                     { 86                         byte[]data=http://www.mamicode.com/NetTool.getImage(path);> 87                         Bitmap bm=BitmapFactory.decodeByteArray(data, 0, data.length); 88                         imageView.setImageBitmap(bm); 89                     }catch(Exception e) 90                     { 91                         Log.i("MyTest",e.getMessage()); 92                         Toast.makeText(MainActivity.this, e.getMessage(), 1).show(); 93                     } 94                 } 95             }); 96             return rootView; 97         } 98     } 99 100 }
View Code

 6、在AndroidManifest.xml中添加服务权限

<uses-permission android:name="android.permission.INTERNET"/>

Android客户端单线程下载