求一个安卓网络开发的例子

AllenZhang0516 2014-01-25 12:17:39
内容包括使用httpClient抓取网络数据、解析返回的数据、最后把数据显示或绑定到控件上。新人发帖,求赐教!
不要焘姆卡特的模拟,要抓取真实的网络数据。最好是一个打包好可以直接导入eclipse的压缩文件。
...全文
291 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bmzhao 2014-01-27
  • 打赏
  • 举报
回复
也在做网站App。
fullfree 2014-01-26
  • 打赏
  • 举报
回复
android-async-http 这个库http://loopj.com/android-async-http/ 还有诸如com.ning打头的一个网络库,当然它需要选择网络后台,netty就是常见选择 https://github.com/AsyncHttpClient/async-http-client 至于绑定控件之类的还是自己处理吧 这些都是开源的,用不用看具体需要,没必要自己写,它们的用法都写的很明白
缺水。的鱼 2014-01-26
  • 打赏
  • 举报
回复
而且他这个demo似乎没有联网啊,不是还得用到HttpURLConnection! 如下: public void captureHtml(String ip) throws Exception { String strURL = "http://ip.chinaz.com/?IP=" + ip; URL url = new URL(strURL); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); InputStreamReader input = new InputStreamReader(httpConn .getInputStream(), "utf-8"); BufferedReader bufReader = new BufferedReader(input); String line = ""; StringBuilder contentBuf = new StringBuilder(); while ((line = bufReader.readLine()) != null) { contentBuf.append(line); } String buf = contentBuf.toString(); int beginIx = buf.indexOf("查询结果["); int endIx = buf.indexOf("上面四项依次显示的是"); String result = buf.substring(beginIx, endIx); System.out.println("captureHtml()的结果:\n" + result); }
缺水。的鱼 2014-01-26
  • 打赏
  • 举报
回复
将url换成百度首页url
a372210774 2014-01-26
  • 打赏
  • 举报
回复
楼上的都可以!!!
s478853630 2014-01-26
  • 打赏
  • 举报
回复
/**
     * 根据url获得页面源码, 调用web接口
     * @param url 访问地址, 必备参数
     * @param method 请求方式post还是get, 默认get
     * @param params 参数列表 post必备, 比如:"name=张三&age=18"
     * @param sessionInfo 可以保持session, 默认不保持
     * @param encoding 编码格式, 默认UTF_8
     * @param isLine 得到的源码是否换行, 默认false
     * @return
     */
	public String sound(String url, String method, String params, String sessionInfo, String encoding, boolean isLine) throws Exception {
		Log.e("AbstractActivity", "调用web接口:" + url);
		encoding = (isBlank(encoding) ? HTTP.UTF_8 : encoding);
		method = (isBlank(method) ? Domain.REQUEST_GET : method.toUpperCase());
		String mathStr = "mathRandom=" + Math.random();
		if (method.equals(Domain.REQUEST_GET)) {url += (url.indexOf("?") != -1 ? "&" : "?") + mathStr;}
		HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
		if (!isBlank(sessionInfo)) {conn.setRequestProperty("Cookie", sessionInfo);}
		conn.setRequestMethod(method);
		if (requestTime > 0) {
			conn.setConnectTimeout(requestTime);
			conn.setReadTimeout(requestTime);
		}
		if (method.equals(Domain.REQUEST_POST)) {
			conn.setDoOutput(true);
			OutputStream output = conn.getOutputStream(); 
			output.write((isBlank(params) ? mathStr : params + "&" + mathStr).getBytes(encoding)); 
			output.flush();output.close();
		}
		String response = FileUtil.get().readFile(conn.getInputStream(), encoding, 1, isLine);
		conn.disconnect();
		requestTime = Domain.LONG_REQUEST_TIME;
		return response;
	}
AllenZhang0516 2014-01-25
  • 打赏
  • 举报
回复
越简单越好,最好注释详细些的。
ruyilin 2014-01-25
  • 打赏
  • 举报
回复
二楼的那个DEMO只能在4.0以下能使用,代码没错,但是需要重启一个线程,才能正常使用,楼主,需要加我QQ 在家里代码没带!回公司给你!664=====51===070
AllenZhang0516 2014-01-25
  • 打赏
  • 举报
回复
引用 2 楼 birdsaction 的回复:

package com.example.http_demo;

import android.util.Log;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import java.io.IOException;

/**
 * Created by gaofeng on 14-1-14.
 */
public class HttpCaller {
    public String httpGet(String url) {
        Log.d("httpGet", "url:" + url);
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet _httpGet = new HttpGet(url);
        try {
            HttpParams params = new BasicHttpParams();
            HttpConnectionParams.setConnectionTimeout(params,20000);
            _httpGet.setParams(params);

            HttpResponse httpResponse = httpClient.execute(_httpGet);
            StatusLine _status = httpResponse.getStatusLine();

            if (_status.getStatusCode() == 200) {
                Log.d("httpGet", "req is 200.");
                return EntityUtils.toString(httpResponse.getEntity());
            }
        } catch (IOException e) {
            e.printStackTrace();
            return e.getMessage();
        }
        return null;
    }
}








package com.example.http_demo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

/**
 * gaofeng
 */
public class MyActivity extends Activity {

    Button btn;
    EditText editText;
    TextView textView;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btn = (Button) findViewById(R.id.btn1);
        editText = (EditText) findViewById(R.id.edit1);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                run();
            }
        });
        textView = (TextView) findViewById(R.id.content);

    }


    void run() {
        final String url = editText.getText().toString();
        new Thread() {
            public void run() {
                String content = new HttpCaller().httpGet(url);
                showContent(content);
            }
        }.start();
    }


    void showContent(final String content) {
        this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                textView.setText(content);
            }
        });
    }


}


我运行了您给的例子,可是它还是在Tomcat上模拟,并没有抓取实际网站的数据呀。而且,您也没说在哪段代码写要抓取的网站的域名或ID.本人菜鸟,勿怪。
AllenZhang0516 2014-01-25
  • 打赏
  • 举报
回复
请问比如我需要百度首页的数据,应该把百度的域名和Ip地址写在您这个程序的哪一行
Birds2018 2014-01-25
  • 打赏
  • 举报
回复

package com.example.http_demo;

import android.util.Log;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import java.io.IOException;

/**
 * Created by gaofeng on 14-1-14.
 */
public class HttpCaller {
    public String httpGet(String url) {
        Log.d("httpGet", "url:" + url);
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet _httpGet = new HttpGet(url);
        try {
            HttpParams params = new BasicHttpParams();
            HttpConnectionParams.setConnectionTimeout(params,20000);
            _httpGet.setParams(params);

            HttpResponse httpResponse = httpClient.execute(_httpGet);
            StatusLine _status = httpResponse.getStatusLine();

            if (_status.getStatusCode() == 200) {
                Log.d("httpGet", "req is 200.");
                return EntityUtils.toString(httpResponse.getEntity());
            }
        } catch (IOException e) {
            e.printStackTrace();
            return e.getMessage();
        }
        return null;
    }
}








package com.example.http_demo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

/**
 * gaofeng
 */
public class MyActivity extends Activity {

    Button btn;
    EditText editText;
    TextView textView;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btn = (Button) findViewById(R.id.btn1);
        editText = (EditText) findViewById(R.id.edit1);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                run();
            }
        });
        textView = (TextView) findViewById(R.id.content);

    }


    void run() {
        final String url = editText.getText().toString();
        new Thread() {
            public void run() {
                String content = new HttpCaller().httpGet(url);
                showContent(content);
            }
        }.start();
    }


    void showContent(final String content) {
        this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                textView.setText(content);
            }
        });
    }


}


80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧