Android는 하위 스레드를 통해 URL 그림을 로드합니다.

Android는 하위 스레드를 통해 URL 그림을 로드합니다.
어제 오후 내내 SD카드, 자원 파일, 인터넷에서 사진을 불러오는 물건을 뒤척이며 퇴근할 때까지 한 시간만 더 했습니다. 제 기술이 별로인 것을 용서해 주십시오. 어차피 가기 전에 프로젝트에 넣었으니 사장님께 창피를 주지 않은 셈입니다!URL을 통해 네트워크에 있는 그림을 불러올 때, 나는 단지 실행 가능한 방법을 제공할 뿐이고, 핵심 코드도 내가 인터넷에서 Copy를 통해 스스로 개선한 것이다.먼저 네트워크 액세스 권한을 추가합니다.
    <uses-permission android:name="android.permission.INTERNET" />

처음에 인터넷에서 실례를 찾았을 때 대부분의 예시가 메인 라인에서 네트워크 요청을 실행하는 것을 발견했지만android4.0 이후 메인 라인에서 네트워크 접근을 할 수 없기 때문에 ANR이 발생할 수 있기 때문에 하위 라인으로 네트워크 접근을 요청한 다음에 메시지를 통해 메인 라인에 UI를 업데이트하라고 알렸다.이것은 단지 인터넷상의 많은 방법 중의 하나일 뿐이다.이 연결을 참고할 수 있습니다:android4.0 이상에서 네트워크 요청을 실행하는 방법은 다음에 코드를 붙입니다.
  • activity_main.xml
  • <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:orientation="vertical"
        tools:context=".MainActivity" >
    
        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
    
            <EditText
                android:id="@+id/img_edt"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:layout_marginTop="3dp"
                android:hint="  URL  "
                android:layout_toLeftOf="@+id/img_btn"
                android:background="@drawable/shape_edt"
                android:height="50dp" />
    
            <Button
                android:id="@+id/img_btn"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="3dp"
                android:background="@drawable/shape"
                android:text="  "
                android:textSize="18dp" />
        RelativeLayout>
    
        <ImageView
            android:id="@+id/imagevv"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    
    LinearLayout>
  • MainActivity.java
  • package com.example.imageload;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity {
    
        private Button searchBtn;//     
        private ImageView img;//     
        private EditText searchEdt;//    
        private LoadImageConnection conn;//    
        private Handler mhandler;
        private String path;// URL  
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            searchBtn = (Button) findViewById(R.id.img_btn);
            img = (ImageView) findViewById(R.id.imagevv);
            searchEdt = (EditText) findViewById(R.id.img_edt);
            init();
        }
    
        private void init() {
            //   message  
            mhandler = new Handler() {
                public void handleMessage(Message msg) {
                    if (msg.what == 0x123) {
                        img.setImageBitmap((Bitmap) msg.obj);
                    }
                }
            };
            //          
            searchBtn.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    path = searchEdt.getText().toString();
                    conn = new LoadImageConnection(mhandler, path);
                    conn.start();//               
                }
            });
    
        }
    
    }
    
  • LoadImageConnection.java 서브스레드
  • package com.googosoft.hhxy.LagerImage;
    
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    import android.os.Handler;
    import android.os.Message;
    
    public class LoadImageConnection extends Thread {
        Handler mhandler;
        String ImageUrl;
    
        public LoadImageConnection(Handler mhandler, String ImageUrl) {
            this.mhandler = mhandler;
            this.ImageUrl = ImageUrl;
        }
    
        @Override
        public void run() {
            try {
                URL url = new URL(ImageUrl);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5000);
                conn.setRequestProperty(
                        "User-Agent",
                        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Shuame)");
                int responseCode = conn.getResponseCode();
                if (responseCode == 200) {
                    InputStream inputStream = conn.getInputStream();
                    // Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                    // iv.setImageBitmap(bitmap);
                    //            view         
                    Message msg = new Message();
                    msg.what = 0x123;
                    msg.obj = inputStream;
                    mhandler.sendMessage(msg);
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    
  • shape.xml 스타일 파일
  • 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <corners android:radius="15dp" />
    
        <solid android:color="#2A9BE5" />
    
    shape>
  • shape_btn.xml
  • 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <corners android:radius="8px" />
    
        <solid android:color="#FFFFFF" />
    
        <stroke
            android:width="2px"
            android:color="#BFBFBF" />
    
    shape>

    소스:http://download.csdn.net/detail/shuai_de_yi_ta_hu_tu/9411768

    좋은 웹페이지 즐겨찾기