討論區快速選單
知識庫快速選單
程式設計俱樂部Facebook粉絲團 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
無法顯示公家網站的JSON資料於LOG上
更改我的閱讀文章字型大小
作者 : hahabrobro(尼克)
[ 貼文 5 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/5/5 下午 08:56:52
大家好,事情是這樣的,最近在練習從公家網站的提供的JSON格式資料預計是顯示在LISTVIEW上
但是最近練習才剛做沒多久,就卡住了....因為範例影片是先把所有的JSON資料都先顯示在LOG上
而我也照做,但是就卡住了... 而我也看不出來是為什麼,只知道一直發生catch 但是又看不出來哪裡出錯
以下是我完整src code
http://data.kaohsiung.gov.tw/Opendata/DownLoad.aspx?Type=2&CaseNo1=BA&CaseNo2=1&FileType=2&Lang=C <====這是高雄市的JSON資料網址


package com.example.json;

import org.apache.http.HttpResponse;
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 org.json.JSONArray;

import android.app.Activity;
import android.content.Entity;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity {
Button bt;
ListView lv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.button1);
lv = (ListView) findViewById(R.id.listView1);
bt.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
getJsondata();
}
});

}

private JSONArray getJsondata() {
String url = "http://data.kaohsiung.gov.tw/Opendata/DownLoad.aspx?Type=2&CaseNo1=BA&CaseNo2=1&FileType=2&Lang=C";
HttpGet httpget = new HttpGet(url);
try {
HttpResponse httphttpResponse = gethttpclient().execute(httpget);
String result = EntityUtils.toString(httphttpResponse.getEntity());
Log.e("result", result);
JSONArray json = new JSONArray(result);
bt.setText("成功");
return json;
} catch (Exception e) {
     //一直跑到這裡來,不知道為什麼.....
bt.setText("失敗");
return null;
}

}

private DefaultHttpClient gethttpclient() {
HttpParams httpparams = new BasicHttpParams();
int timeoutconnection = 5000;
HttpConnectionParams
.setConnectionTimeout(httpparams, timeoutconnection);
int timeoutsocket = 3000;
HttpConnectionParams.setSoTimeout(httpparams, timeoutsocket);
DefaultHttpClient dfhttpclient = new DefaultHttpClient(httpparams);
return dfhttpclient;
}

@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;
}

}
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4499 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/5/5 下午 10:27:56
a little suggestion , can you catch the exception ?
作者 : hahabrobro(尼克)
[ 貼文 5 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/5/5 下午 10:47:41
謝謝您的回答,其實我try/catch也是....有些程式碼強制要用我才會用....或是書上網路教材 說要用 我才會用....so..我也不太清楚您的意思..
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4499 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/5/6 上午 06:46:48
JSONArray json = new JSONArray(result);
bt.setText("成功");
return json;
} catch (Exception e) {
     //一直跑到這裡來,不知道為什麼.....

     // not only get message , but also get exceptions
bt.setText("失敗");


see above codes , if exceptions always occur , you should dump them for understanding their kinds and handle them .
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4499 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/5/6 下午 08:07:40
a simple example about how to catch exception in android
http://www.eoeandroid.com/thread-96521-1-1.html
first , you should dump the kind of exception . Again you may handle it in a suitable way
作者 : beldandy(貝爾丹迪)
[ 貼文 10 | 人氣 0 | 評價 40 | 評價/貼文 4 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人hahabrobro註記此篇回應為很有道理 2014/5/6 下午 08:09:24
你這問題很大

首先一開始偵錯
跑到 HttpResponse httphttpResponse = gethttpclient().execute(httpget); 這一行
出現 android.os.NetworkOnMainThreadException
查了之後
是說android自從4.0之後 不允許主線程跑http
避免等待時間太久
http://my.eoe.cn/iceskysl/archive/4382.html 有說明解法
先採用第一種解法 但是最低版本要9以上 也就是android 2.3以上

在MainActivity文件的setContentView(R.layout.activity_main)下面加上
if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

然後繼續偵錯
發現找不到網域
也就是模擬器程式沒辦法抓domain name 只能用ip
若要改成domain name也可以
http://blog.xuite.net/hsunet0122/life/32531206
裡面的第一項跟第二項 先完成

然後在參考
http://blog.changyy.org/2011/05/android.html
的中間部分
設定模擬器的 DNS 資訊:

[Run] -> [Run Configurations] -> [Android Application] -> [Your Project Name] -> [Target]

Additional Emulator Command Line Options 填寫 -dns-server 8.8.8.8,8.8.4.4 即可

然後把模擬器關掉 重新用偵錯啟動模擬器 就可以跑了

下次把中斷點設定在try之前 還是可以偵錯的
作者 : hahabrobro(尼克)
[ 貼文 5 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/5/7 上午 09:32:44
感謝您的回覆,我會找時間好好研究一下。感激不盡
作者 : hahabrobro(尼克)
[ 貼文 5 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/5/7 上午 09:36:50
感謝您的回覆,我會找時間好好研究一下。感激不盡
作者 : hahabrobro(尼克)
[ 貼文 5 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/5/7 上午 09:36:53
感謝您的回覆,我會找時間好好研究一下。感激不盡
 板主 : 徵求中
 > Android - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Android - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Android
1 ozzy 340 
2 Jeffrey 110 
3 克理斯 110 
4 20100410 100 
5 farastein 90 
6 蓋柏拉許 70 
7 member one 60 
8 joe 50 
9 panda121 50 
10 kk 50 
Android
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625