qq_26687333 2015-05-16 03:58 采纳率: 87.5%
浏览 2143
已采纳

android.os.NetworkOnMainThreadException

package com.demo.clientdemo;

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

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.support.v7.app.ActionBarActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;

public class MainActivity extends ActionBarActivity {
private EditText et;
private ImageView iv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    et = (EditText) findViewById(R.id.et);
    iv = (ImageView) findViewById(R.id.iv);
}

public void click(View view) {

    String path = et.getText().toString().trim();
    //
    HttpClient client = new DefaultHttpClient();
    // 
    HttpGet httpGet = new HttpGet(path);
    try {
        HttpResponse response = client.execute(httpGet);
        int code = response.getStatusLine().getStatusCode();
        if (code == 200) {
            InputStream is = response.getEntity().getContent();
            final Bitmap bitmap = BitmapFactory.decodeStream(is);

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    iv.setImageBitmap(bitmap);
                }
            });
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

}

界面
<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:orientation="vertical"

android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.demo.clientdemo.MainActivity" >

<ImageView
    android:layout_weight="100"
    android:id="@+id/iv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<EditText
    android:id="@+id/et"
    android:singleLine="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="http://img3.3lian.com/2006/013/02/059.jpg"
    android:hint="请出入url"
     />
 <Button
     android:onClick="click"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="浏览"
   />

发布后点击浏览要报错,大牛们帮忙看看怎么解决啊

  • 写回答

4条回答 默认 最新

  • danielinbiti 2015-05-16 10:18
    关注

    两个问题
    1、http访问需要在非UI线程上进行
    2、界面更新需要在UI线程上进行

     public void click(View view) {
    
        String path = et.getText().toString().trim();
            new Thread(){ //http访问需要在非UI线程内,需要起thread线程或者asyctask方式也行。
              public void run(){
        //
        HttpClient client = new DefaultHttpClient();  
        // 
        HttpGet httpGet = new HttpGet(path);
        try {
            HttpResponse response = client.execute(httpGet);
            int code = response.getStatusLine().getStatusCode();
            if (code == 200) {
                InputStream is = response.getEntity().getContent();
                final Bitmap bitmap = BitmapFactory.decodeStream(is);
    
                runOnUiThread(new Runnable() {//runOnUiThread如果这是通过handle方式到ui线程更新,那没问题,否则需要通过handle方式发送信息进行更新
                    @Override
                    public void run() {
                        iv.setImageBitmap(bitmap);
                    }
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
            }
       }.start();
    }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?