Android网络请求与JSON解析和数据抓取小实例

在Android开发中,我们或多或少都会需要用到请求,获取JSON和解析JSON,来获取有用的数据,这里我们可以写些小实例来帮助那些入门的初学者,少走学习的歪

路,节约更多时间往其他方向学习和发展


我就写一个登录接口的小应用,我只做了JSON抓取,而没做解析了,因为是测试用的


MainActivity :


package com.jdys;
import java.io.IOException;
import org.apache.http.client.ClientProtocolException;
import org.json.JSONException;
import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends Activity {
	// username edittext
	private EditText ed_user;
	// password edittext
	private EditText ed_pwd;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //Instantiated user
        ed_user = (EditText)findViewById(R.id.user);
        //Instantiated pwd
        ed_pwd = (EditText)findViewById(R.id.pwd);
    }
    // OK clickbotton
    public void Login(View v) throws Exception{
    	String time = (""+System.currentTimeMillis()).substring(0,10);
    	String user = ed_user.getText().toString();
    	String pwd = ed_pwd.getText().toString();
    	LoginAPI.LOGIN_REQUEST_URL = LoginAPI.LOGIN_REQUEST_URL.replace("TIMESTAMP", time);
    	LoginAPI.LOGIN_REQUEST_URL = LoginAPI.LOGIN_REQUEST_URL.replace("USERNAME", user);
    	LoginAPI.LOGIN_REQUEST_URL = LoginAPI.LOGIN_REQUEST_URL.replace("PASSWORD", pwd);
    	Log.d("XXXXXXXXXXXXXXXX", "时间戳:"+time+" "+"账户:"+user+" "+"密码:"+pwd+"\n"+LoginAPI.LOGIN_REQUEST_URL);
		// 发送请求获取数据
		new Thread(){
			@Override
			public void run() {
				super.run();
			try {
				String	jsonObject = LoginService.httpRequest(LoginAPI.LOGIN_REQUEST_URL);
				Log.d("XXXXXXXXXXXXXXXX", "返回的数据:"+jsonObject);
			} catch (ClientProtocolException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (JSONException e) {
				e.printStackTrace();
			}
			}
		}.start();
    }
	public static boolean checkNetworkAvailable(Context context) {
		ConnectivityManager connectivity = (ConnectivityManager) context
				.getSystemService(Context.CONNECTIVITY_SERVICE);
		if (connectivity == null) {
			System.out.println(" ######### 网络链接错误 ############### ");
			return false;
		} else {
			NetworkInfo[] info = connectivity.getAllNetworkInfo();
			if (info != null) {
				for (int i = 0; i < info.length; i++) {
					if (info[i].getState() == NetworkInfo.State.CONNECTED) {
						NetworkInfo netWorkInfo = info[i];
						if (netWorkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
							return true;
						} else if (netWorkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
							return true;
						}
					}
				}
			}
		}
		return false;
	}
}

LoginService :


package com.jdys;
import java.io.IOException;
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 org.apache.http.util.EntityUtils;
import org.json.JSONException;
import android.util.Log;
public class LoginService {
	public static String httpRequest(String requestURL) throws ClientProtocolException, IOException, JSONException{
		StringBuffer buffer = new StringBuffer();
		HttpClient client = new DefaultHttpClient();
		HttpGet get = new HttpGet(requestURL);
		HttpResponse response = client.execute(get);
		if(response.getStatusLine().getStatusCode()==LoginAPI.HTTP_STATS){
			buffer.append(EntityUtils.toString(response.getEntity(),"UTF-8"));
		}else{
			Log.d("XXXXXXXXXXXXXXXX", "获取数据失败!");
		}
			return buffer.toString();
	}
}


运行结果:



需要注意的是,在 MainActivity 的 LoginService.httpRequest()方法需要放到新(子)线程里执行网络操作,因为在Android SDK 4.0及以上在主活动(此篇日志为MainActivity)里进行网络操作,需要在子线程里执行,否则会抛出 NetworkOnMainThreadException 异常

请大家引起注意~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Engineer-Jsp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值