기초 학습 총화 (7) - 하위 스 레 드 및 Handler
43475 단어 handler
1 <LinearLayout 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:orientation="vertical"
6 tools:context=".MainActivity" >
7
8 <ImageView android:id="@+id/iv_icon"
9 android:layout_width="fill_parent"
10 android:layout_height="0dip"
11 android:layout_weight="1" />
12
13 <LinearLayout
14 android:layout_width="fill_parent"
15 android:layout_height="wrap_content"
16 android:orientation="horizontal" >
17
18 <EditText android:id="@+id/et_url"
19 android:layout_width="0dip"
20 android:layout_height="wrap_content"
21 android:layout_weight="1" />
22
23 <Button android:id="@+id/btn_submit"
24 android:layout_width="wrap_content"
25 android:layout_height="wrap_content"
26 android:textSize="20sp"
27 android:text="Go" />
28
29
30 </LinearLayout>
31 </LinearLayout>
선형 레이아웃
1 public class MainActivity extends Activity implements OnClickListener {
2 private final int SUCESS = 0;
3 private final int ERROR=-1;
4 private EditText etUrl;
5 private ImageView ivIcon;
6
7
8 private Handler hand=new Handler(){
9 /*
10 *
11 * */
12 @Override
13 public void handleMessage(Message msg){
14 super.handleMessage(msg);
15 if(msg.what==SUCESS){// handle
16 ivIcon.setImageBitmap((Bitmap)msg.obj);// bitmap
17 }else if(msg.what==ERROR){
18 Toast.makeText(MainActivity.this, " ", 0).show();
19 }
20 }
21 };
22
23
24 @Override
25 protected void onCreate(Bundle savedInstanceState) {
26 super.onCreate(savedInstanceState);
27 setContentView(R.layout.activity_main);
28
29 ivIcon = (ImageView)findViewById(R.id.iv_icon);
30 etUrl = (EditText)findViewById(R.id.et_url);
31
32 findViewById(R.id.btn_submit).setOnClickListener(this);
33 }
34
35 @Override
36 public void onClick(View v) {
37 // TODO Auto-generated method stub
38 final String url=etUrl.getText().toString();
39 //Bitmap bitmap=getImageFormat(url);
40 //ivIcon.setImageBitmap(bitmap);// image
41 new Thread(new Runnable(){
42 @Override
43 public void run(){
44 Bitmap bitmap=getImageFormat(url);
45 if(bitmap!=null){
46 Message msg=new Message();
47 msg.what=SUCESS;// handle
48 msg.obj=bitmap;// msg
49 hand.sendMessage(msg);
50 }else{
51 Message msg=new Message();
52 msg.what=ERROR;
53 hand.sendMessage(msg);
54 }
55 }
56 }).start();
57
58 }
59
60 /**
61 * url
62 * */
63 private Bitmap getImageFormat(String url){
64 HttpURLConnection conn=null;
65 try {
66 URL mUrl=new URL(url);
67 conn =(HttpURLConnection)mUrl.openConnection();
68 //
69 conn.setRequestMethod("GET");
70 //
71 conn.setConnectTimeout(10000);
72 //
73 conn.setReadTimeout(5000);
74
75 conn.connect();
76 int code=conn.getResponseCode();//
77 if(code==200){
78 //
79 InputStream is=conn.getInputStream();//
80 Bitmap bitmap = BitmapFactory.decodeStream(is);// bitmap
81
82 return bitmap;
83 }else{
84 Log.i("MainActivity"," ...");
85 }
86
87 } catch (Exception e) {
88 // TODO Auto-generated catch block
89 e.printStackTrace();
90 }finally{
91 if(conn!=null){
92 conn.disconnect();
93 }
94 }
95
96 return null;
97 }
98
99 }
View Code
권한: < uses - permission android: name = "android. permission. INTERNET" / >
하위 스 레 드 를 사용 하지 않 는 방식 에서: 시간 초과 후 프로그램 이상 addroid not responding (응용 프로그램 응답 없 음) 인자 프로그램 대기 가 메 인 스 레 드 ANR 이상 을 막 았 습 니 다: Called Frow WrongThreadException: Only the original thread that creaded a view hierarchy can touch its views 는 원본 스 레 드 (메 인 스 레 드 또는 ui 스 레 드) 만 view 대상 을 수정 할 수 있 습 니 다.
handler 처리 과정
1 public class MainActivity extends Activity {
2
3 private EditText etUserName;
4 private EditText etPassword;
5
6 @Override
7 protected void onCreate(Bundle savedInstanceState) {
8 super.onCreate(savedInstanceState);
9 setContentView(R.layout.activity_main);
10
11 etUserName = (EditText) findViewById(R.id.et_username);
12 etPassword = (EditText) findViewById(R.id.et_password);
13 }
14
15 public void doGet(View v) {
16 final String userName = etUserName.getText().toString();
17 final String password = etPassword.getText().toString();
18
19 new Thread(
20 new Runnable() {
21
22 @Override
23 public void run() {
24 // get
25 final String state = NetUtils.loginOfGet(userName, password);
26
27 //
28 runOnUiThread(new Runnable() {
29 @Override
30 public void run() {
31 //
32 Toast.makeText(MainActivity.this, state, 0).show();
33 }
34 });
35 }
36 }).start();
37 }
38
39 public void doPost(View v) {
40 final String userName = etUserName.getText().toString();
41 final String password = etPassword.getText().toString();
42
43 new Thread(new Runnable() {
44 @Override
45 public void run() {
46 final String state = NetUtils.loginOfPost(userName, password);
47 //
48 runOnUiThread(new Runnable() {
49 @Override
50 public void run() {
51 //
52 Toast.makeText(MainActivity.this, state, 0).show();
53 }
54 });
55 }
56 }).start();
57 }
58 }
View Code
1 public class NetUtils {
2
3 private static final String TAG = "NetUtils";
4
5 /**
6 * post
7 * @param userName
8 * @param password
9 * @return
10 */
11 public static String loginOfPost(String userName, String password) {
12 HttpURLConnection conn = null;
13 try {
14 URL url = new URL("http://10.0.2.2:8080/ServerItheima28/servlet/LoginServlet");
15
16 conn = (HttpURLConnection) url.openConnection();
17
18 conn.setRequestMethod("POST");
19 conn.setConnectTimeout(10000); //
20 conn.setReadTimeout(5000); //
21 conn.setDoOutput(true); // ,
22 // conn.setRequestProperty("Content-Length", 234); // ,
23
24 // post
25 String data = "username=" + userName + "&password=" + password;
26
27 // , , ,
28 OutputStream out = conn.getOutputStream();
29 out.write(data.getBytes());
30 out.flush();
31 out.close();
32
33 int responseCode = conn.getResponseCode();
34 if(responseCode == 200) {
35 InputStream is = conn.getInputStream();
36 String state = getStringFromInputStream(is);
37 return state;
38 } else {
39 Log.i(TAG, " : " + responseCode);
40 }
41 } catch (Exception e) {
42 e.printStackTrace();
43 } finally {
44 if(conn != null) {
45 conn.disconnect();
46 }
47 }
48 return null;
49 }
50
51 /**
52 * get
53 * @param userName
54 * @param password
55 * @return
56 */
57 public static String loginOfGet(String userName, String password) {
58 HttpURLConnection conn = null;
59 try {
60 String data = "username=" + URLEncoder.encode(userName) + "&password=" + URLEncoder.encode(password);
61 URL url = new URL("http://10.0.2.2:8080/ServerItheima28/servlet/LoginServlet?" + data);
62 conn = (HttpURLConnection) url.openConnection();
63
64 conn.setRequestMethod("GET"); // get post
65 conn.setConnectTimeout(10000); //
66 conn.setReadTimeout(5000); //
67
68 int responseCode = conn.getResponseCode();
69 if(responseCode == 200) {
70 InputStream is = conn.getInputStream();
71 String state = getStringFromInputStream(is);
72 return state;
73 } else {
74 Log.i(TAG, " : " + responseCode);
75 }
76 } catch (Exception e) {
77 e.printStackTrace();
78 } finally {
79 if(conn != null) {
80 conn.disconnect(); //
81 }
82 }
83 return null;
84 }
85
86 /**
87 *
88 * @param is
89 * @return
90 * @throws IOException
91 */
92 private static String getStringFromInputStream(InputStream is) throws IOException {
93 ByteArrayOutputStream baos = new ByteArrayOutputStream();
94 byte[] buffer = new byte[1024];
95 int len = -1;
96
97 while((len = is.read(buffer)) != -1) {
98 baos.write(buffer, 0, len);
99 }
100 is.close();
101
102 String html = baos.toString(); // , : utf-8
103
104 // String html = new String(baos.toByteArray(), "GBK");
105
106 baos.close();
107 return html;
108 }
109 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
IAlertNotifyHandler를 통해 Alert Email을 정의하는 방법사용자 정의 Alert email, 모양만 수정하는 것이 아니라 내용의 출력을 제어해야 합니다 전체 코드는 다음과 같습니다. 3. SharePoint Server의 GAC에 dll을 배치합니다. 4. C:\Progr...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.