android 与 php交互 获取复杂json数据 +正在加载效果理解
来源:互联网 发布:阿里云的前端面试题 编辑:程序博客网 时间:2024/06/05 06:29
当时 在解析数据的时候 总是报空指针异常 原因是 由于开启了新的线程,2者单独工作,在获取json数据时 主线程也工作,也就是json数据获取还没结束 主线程便执行
JSONArray jsonArray = new JSONArray(jsonData); 导致 jsonData为空,造成空指针, 解决方法一 在json数据解析之前先判空 即可解决 但是用户体验不好
解决方法二 是 用正在加载效果,其实很简单,就是先创建 show 然后找一个地方关闭 dismiss()即可 ,所以只需要用 handler 和message 接受和获取消息,当获取完毕时 发送message消息 获取后 关闭 正在加载并显示数据 即可 !
代码如下
public class MainActivity extends Activity {String jsonData = null;Button bt;TextView txt;ProgressDialog dialog;private Handler mhandler = new Handler(){@Overridepublic void handleMessage(Message msg) { //用handler 来获取解析结束 并关闭 正在加载 和 显示数据switch (msg.what) {case 1:dialog.dismiss();txt.setText(jsonData);break;default:break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);txt= (TextView) findViewById(R.id.txt);bt = (Button) findViewById(R.id.bt);bt.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) { dialog = ProgressDialog.show(MainActivity.this, "正在加载课表...","请稍后..." ,true,true); //创建正在加载框fun();//try {//JSONArray jsonArray = new JSONArray(jsonData); //解析json数据//int count = jsonArray.length();//for(int i = 0;i<count;i++){//JSONObject item = jsonArray.getJSONObject(i);////System.out.println(item.optString("content"));//}//} catch (JSONException e) {//e.printStackTrace();//}if(jsonData!=null){try {//System.out.println(jsonData);JSONArray jsonObject = new JSONObject(jsonData).getJSONObject("data").getJSONArray("list"); <span style="font-family: Arial, Helvetica, sans-serif;">//解析json数据</span>//System.out.println(jsonObject.optString("msg"));JSONObject js = jsonObject.getJSONObject(0);System.out.println("------------------>"+js.optString("description")+"----"+js.optString("create_time"));} catch (JSONException e) {e.printStackTrace();}}}});}public void fun(){new Thread(new Runnable() { @Overridepublic void run() {// TODO Auto-generated method stubHttpClient httpClient = new DefaultHttpClient();HttpGet myGet = new HttpGet(constant.urlArticleString);try {HttpResponse httpResponse = httpClient.execute(myGet);if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){System.out.println("------------->请求成功"+httpResponse.getStatusLine().getStatusCode());HttpEntity entity = httpResponse.getEntity();if (entity != null) {InputStream inputStream = entity.getContent();jsonData = convertStreamToString(inputStream);Message msg = mhandler.obtainMessage(1);mhandler.sendMessage(msg);}}else {System.out.println("--------->请求失败"+httpResponse.getStatusLine().getStatusCode());}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}).start();}public static String convertStreamToString(InputStream is) {BufferedReader reader = null;try {reader = new BufferedReader(new InputStreamReader(is, "UTF-8"),// ��ֹģ�����ϵ�����512 * 1024);} catch (UnsupportedEncodingException e1) {e1.printStackTrace();}StringBuilder sb = new StringBuilder();String line = null;try {while ((line = reader.readLine()) != null) {sb.append(line);}} catch (IOException e) {Log.e("DataProvier convertStreamToString", e.getLocalizedMessage(),e);} finally {try {is.close();} catch (IOException e) {e.printStackTrace();}}System.out.println(sb.toString());return sb.toString();}}
0 0
- android 与 php交互 获取复杂json数据 +正在加载效果理解
- Android与PHP交互,Android传递JSON数据,PHP接受并保存数据
- 正在加载数据中效果
- android与php的json交互
- android 与servlet json数据交互
- android 与servlet json数据交互
- android客户端与php服务器的json数据简单交互(一)
- android客户端与php服务器的json数据简单交互(二)
- android客户端与php服务器的json数据简单交互(一)
- 用jquery +ajax 实现与php后台交互json数据
- Android开发中的正在加载动画效果
- android正在加载效果(自定义view)
- Xamarin.Android 实现正在加载动画效果
- PHP获取JSON数据
- Android客户端与PHP服务端通信(二)---JSON交互
- Android客户端与服务器端的json数据交互
- Android中与服务器端交互数据中json的用法
- 实践Android客户端与服务端之间使用JSON交互数据。
- C++虚函数(11) - 纯虚函数与抽象类
- java中Statement详细用法。
- 第一章 Apache Hadoop的介绍
- oh my zsh mac 安装方法
- IPMsg源码阅读笔记(1)
- android 与 php交互 获取复杂json数据 +正在加载效果理解
- C++虚函数(12) - 纯虚析构函数
- LCD显示
- 自定义Tabs
- JAVA中实现double型数字丛右至左每三位用逗号隔开
- LeetCode | Contains Duplicate
- NSString属性什么时候用copy,什么时候用strong?
- 很好的iOS博客地址
- Aquarium Tank(csu1634+几何+二分)Contest2087 - 湖南多校对抗赛(2015.05.24)-G