您的位置:首页 > 移动开发 > Android开发

Android原生请求json服务器数据

2018-03-01 14:05 447 查看
一,首先定义一个触发事件,若是点击事件,就写个buttom;

二,请求网络数据需要开启线程,因此要写的是什么呢?请看下面详细教程;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener {

private Handler handler;//开启线程是需要的

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
handler=new MyHandler();//此时new一个 MyHandler()
back=(LinearLayout)findViewById(R.id.back);
back.setOnClickListener(this);
new PostThread().start();//用post方法发送请求

}


接下来你懂得了,真真切切的请求服务器json数据了,体验获取到json数据以及json解析的方法;

class PostThread extends Thread{
public void run(){
HttpURLConnection conn=null;
String urlStr="。。。。。";//这个路径就用自己的咯~
InputStream is = null;
String resultData = "";
try {
URL url = new URL(urlStr); //URL对象
conn = (HttpURLConnection)url.openConnection(); //使用URL打开一个链接,下面设置这个连接
conn.setRequestMethod("POST"); //使用POST请求
if(conn.getResponseCode()==200) {//返回200表示相应成功
is = conn.getInputStream();   //获取输入流
InputStreamReader isr = new InputStreamReader(is);
BufferedReader bufferReader = new BufferedReader(isr);
String inputLine = "";

4000
while ((inputLine = bufferReader.readLine()) != null) {
resultData += inputLine + "\n";
}

System.out.println("post方法取回内容:" + resultData);
showRes("post方法取回内容:" + resultData);
parseJSONWithJSONObject(resultData);
}

} catch (IOException e) {
e.printStackTrace();
}
}
}
//方法一:使用JSONObject
private void parseJSONWithJSONObject(String resultData) {
try {
JSONObject jsonObject=new JSONObject(resultData);
String tips=jsonObject.getString("tips");
if(tips.equals("ok")){
JSONObject userBeanObject=jsonObject.getJSONObject("userBean");//这里的json解析,是用的gson解析,获取到userbean,既方便又好使;
String  age=userBeanObject.getString("email");// 用户名
json_to.setText(age);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
//用于主线程发送消息
public void showRes(String res){
Bundle bundle=new Bundle();
bundle.putString("res",res);//bundle中也可以放序列化或包裹化的类对象数据

Message msg=handler.obtainMessage();//每发送一次都要重新获取
msg.setData(bundle);
handler.sendMessage(msg);//用handler向主线程发送信息
}

//自定义handler类
class MyHandler extends Handler {
@Override
//接收别的线程的信息并处理
public void handleMessage(Message msg) {
Bundle bundle=msg.getData();
//json_one.setText(bundle.get("res").toString());
}
}


没错,这样就可以完美的请求到服务器json数据了,因此要注意的地方又两个知识点,首先是android原生请求要开启线程,以防数据量过大内存泄露,二者是解析json的时候,博主我用到的是Gson解析,直接把服务器路径的json字符串放进去就ok了,不会的网上查下gson使用,是不是瞬间提升档次不少?希望每篇文章都可以帮助到大家学习,一起尽情期待更好的文章发布吧!哈哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: