流沙团
getJSON
2016-9-16 流沙团


0x001



主程序, get请求







package com.gyarmy.testjson;

import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.gyarmy.testjson.utils.StreamTool;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

protected static final int SUCCESS = 0;
protected static final int ERROR = 1;
protected static final int NETWORK_ERROR = 2;
private EditText edit_city_a;
private TextView result1_a;
private TextView result2_a;
private TextView result3_a;
private String url_path;

private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case SUCCESS:
//String data = (String) msg.obj;
//Toast.makeText(MainActivity.this, data, 0).show();
//解析json;
try {
JSONArray data = (JSONArray)msg.obj;
String day01 = data.getString(0);
result1_a.setText(day01);

String day02 = data.getString(1);
result2_a.setText(day02);

String day03 = data.getString(2);
result3_a.setText(day03);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


break;
case ERROR:
Toast.makeText(MainActivity.this, "地址错误!", 0).show();
break;

case NETWORK_ERROR:
Toast.makeText(MainActivity.this, "网络连接错误!", 0).show();
break;
default:
break;
}

}

};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

edit_city_a = (EditText)findViewById(R.id.edit_city);
result1_a = (TextView)findViewById(R.id.result1);
result2_a = (TextView)findViewById(R.id.result2);
result3_a = (TextView)findViewById(R.id.result3);

}


public void getWeather(View v){
//Toast.makeText(this, "test", 0).show();
String city_str = edit_city_a.getText().toString().trim();
if(TextUtils.isEmpty(city_str)){
Toast.makeText(this, "请填写城市!", 0).show();
return;
}
//http://wthrcdn.etouch.cn/weather_mini?city=%E4%B8%8A%E6%B5%B7

try {
url_path = "http://wthrcdn.etouch.cn/weather_mini?city="+URLEncoder.encode(city_str, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println(url_path);

new Thread(){
public void run() {
try {
URL url = new URL(url_path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setConnectTimeout(2000);
conn.setRequestMethod("GET");
int code = conn.getResponseCode();
if(200 == code){
InputStream in = conn.getInputStream();
String data = StreamTool.decodeStream(in);

JSONObject jsonObj = new JSONObject(data);
String desc = jsonObj.getString("desc");
if("OK".equals(desc)){

JSONObject dataObj = jsonObj.getJSONObject("data");
JSONArray jsonArray = dataObj.getJSONArray("forecast");

Message msg = Message.obtain();
msg.obj = jsonArray;
msg.what = SUCCESS;
mHandler.sendMessage(msg);


}else{
Message msg = Message.obtain();
msg.what = ERROR;
mHandler.sendMessage(msg);
}



}else{
Message msg = Message.obtain();
msg.what = ERROR;
mHandler.sendMessage(msg);
}


} catch (Exception e) {
// TODO Auto-generated catch block
Message msg = Message.obtain();
msg.what = NETWORK_ERROR;
mHandler.sendMessage(msg);
e.printStackTrace();
}

};
}.start();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}











0x002



工具程序, 解析数据







package com.gyarmy.testjson.utils;

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

public class StreamTool {

public static String decodeStream(InputStream in) throws IOException {
// TODO Auto-generated method stub
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int len = 0;
while((len=in.read(bytes))>0){
bos.write(bytes);
}
String data = bos.toString();
return data;

}

}





发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容