2 u010869264 u010869264 于 2016.03.09 17:38 提问

android获取网页源码问题

以下是我从网上找的获取网页源码的 代码 所有包都已经正常导入 但是编译后 程序一运行就崩溃 求大神指点
import 略;

/**

  • @author Jasonzhou
  • @since 2013-03-21
  • @功能 读取网页内容
  • @说明 获取网页的全部代码后使用jsuop进行处理, 以便得到想要的内容 **/

public class MainActivity extends Activity {

public String url = "http://blog.csdn.net/jasonzhou613/article/details/7905388";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    manageException();// 处理抛出异常
    TextView tv = (TextView) findViewById(R.id.text);
    String myString = null;
    myString = posturl(url);
    // 设置屏幕显示
     Log.i("---网页代码---", "" + myString);
    String html = myString;
    Document doc = Jsoup.parse(html);
    tv.setText(doc.title());

}

/**
 * 获取参数指定的网页代码,将其返回给调用者,由调用者对其解析 返回String
 */
public String posturl(String url) {
    InputStream is = null;
    String result = "";

    try {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
    } catch (Exception e) {
        return "Fail to establish http connection!" + e.toString();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "utf-8"));
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();

        result = sb.toString();
    } catch (Exception e) {
        return "Fail to convert net stream!";
    }

    return result;
}

public void manageException() {
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
            .detectDiskReads().detectDiskWrites().detectNetwork() // or
                                                                    // .detectAll()
                                                                    // for
                                                                    // all
                                                                    // detectable
                                                                    // problems
            .penaltyLog().build());
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
            .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath()
            .build());
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

}

3个回答

lovingning
lovingning   2016.03.09 18:07
已采纳

第一:进行耗时任务需要另外开启线程。你过去网页代码需要开线程获取数据后交给handler来处理,或者直接转给主线程。
第二:httpclient进行数据传输的方式已经被废弃了,要用url.openconnect方法博客里有。

qq_21912927
qq_21912927   2016.03.09 21:35

主线程不能进行耗时操作的 网络请求当然算 推荐看看github上的开源框架 XUtils

lxk_1993
lxk_1993   Rxr 2016.03.11 08:50

你的把报错信息贴出来 才能更快的找到问题

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!