Android 台灣中文網

標題: 關於Eclipse 抓取json資料 [打印本頁]

作者: hugo3334059    時間: 2013-8-12 02:27
標題: 關於Eclipse 抓取json資料
我參照此Android解析json資料範例教學想嘗試抓取JSON資料來進行顯示



但每次按抓取時都會出現錯誤   讓模擬器顯示Unfortunately, AAA has stopped就關閉了
  1. package com.example.aaa;

  2. import org.apache.http.HttpResponse;
  3. import org.apache.http.client.methods.HttpGet;
  4. import org.apache.http.impl.client.DefaultHttpClient;
  5. import org.apache.http.params.BasicHttpParams;
  6. import org.apache.http.params.HttpConnectionParams;
  7. import org.apache.http.params.HttpParams;
  8. import org.apache.http.util.EntityUtils;
  9. import org.json.JSONArray;
  10. import org.json.JSONException;
  11. import org.json.JSONObject;

  12. import com.example.aaa.MainActivity;
  13. import com.example.aaa.R;

  14. import android.os.Bundle;
  15. import android.app.Activity;
  16. import android.util.Log;
  17. import android.view.Menu;
  18. import android.view.View;
  19. import android.view.View.OnClickListener;
  20. /*import android.widget.AdapterView.OnItemClickListener;*/
  21. import android.widget.ArrayAdapter;
  22. import android.widget.Button;
  23. import android.widget.ListView;
  24. /*import android.widget.*;*/
  25. /*Toast AdapterView*/
  26. public class MainActivity extends Activity {


  27.        
  28.         Button btnParse;
  29.     ListView listResult;

  30.         @Override
  31.         protected void onCreate(Bundle savedInstanceState) {
  32.                 super.onCreate(savedInstanceState);
  33.                 setContentView(R.layout.activity_main);
  34.                 btnParse = (Button)findViewById(R.id.btn_parse);
  35.         listResult=(ListView)findViewById(R.id.list_result);
  36.         btnParse.setOnClickListener(new OnClickListener()
  37.         {public void onClick(View v){
  38.                 getJSONData();
  39.                
  40.                 String [] libStationId = parseJSONData(getJSONData());
  41.                 ArrayAdapter<String> listAdapter = new ArrayAdapter<String>
  42.                 (MainActivity.this
  43.                 , android.R.layout.simple_expandable_list_item_1
  44.                 , libStationId                );
  45.                 listResult.setAdapter(listAdapter);
  46.                
  47.         }
  48.         });
  49.         }
  50.        



  51.         //取得資料 陣列型態
  52.     private JSONArray getJSONData(){
  53.            
  54.             String url = "http://data.ntpc.gov.tw/NTPC/od/data/api/TRB27/;jsessionid=51BC385898B4B1293A1D845041B2E2A8?$format=json";
  55.             HttpGet httpget = new HttpGet(url);
  56.             try{
  57.                     HttpResponse httpresponse = getHttpClient().execute(httpget);
  58.                     String result = EntityUtils.toString(httpresponse.getEntity());
  59.                     Log.e("result",result);
  60.                     JSONArray jsonarr = new JSONArray(result);
  61.                     return jsonarr;
  62.             }catch(Exception e){e.printStackTrace();
  63.                     return null;

  64.             }           
  65.     }
  66.    

  67.     //解析JSON資料後回傳String[] 型態
  68.     private String[] parseJSONData(JSONArray dataInput)
  69.     {
  70.             try {
  71.                     String [] libStationId = new String[dataInput.length()];
  72.                     String [] libEstimateTime = new String[dataInput.length()];
  73.                     String [] libRouteID = new String[dataInput.length()];
  74.             for(int i = 0 ; i <5 ;i++)
  75.             {
  76.                     JSONObject lib = dataInput.getJSONObject(i);
  77.                    
  78.                         Log.e("StationId",lib.getString("StationId"));
  79.                         Log.e("EstimateTime",lib.getString("EstimateTime"));
  80.                         Log.e("RouteID",lib.getString("RouteID"));
  81.                        
  82.                         libStationId[i]=lib.getString("StationId");
  83.                         libEstimateTime[i] = lib.getString("EstimateTime");
  84.                         libRouteID[i] = lib.getString("RouteID");
  85.             }

  86.             return libStationId;
  87.             }catch (JSONException e) {
  88.                         e.printStackTrace();
  89.                         return null;
  90.                 }
  91.     }
  92.    
  93.     //timeout
  94.     private DefaultHttpClient getHttpClient(){
  95.             HttpParams httpparams = new BasicHttpParams();
  96.             int timeoutConnection = 5000;
  97.             HttpConnectionParams.setConnectionTimeout(httpparams, timeoutConnection);
  98.             int timeoutSocket = 3000;       
  99.             HttpConnectionParams.setSoTimeout(httpparams, timeoutSocket);
  100.             DefaultHttpClient dfaultHC = new DefaultHttpClient(httpparams);
  101.             return dfaultHC;
  102.     }       
  103.        
  104.         @Override
  105.         public boolean onCreateOptionsMenu(Menu menu) {
  106.                 // Inflate the menu; this adds items to the action bar if it is present.
  107.                 getMenuInflater().inflate(R.menu.main, menu);
  108.                 return true;
  109.         }

  110. }
複製代碼

作者: ploglin    時間: 2013-8-12 10:45
建議你把原本的project都刪除,然後重新下載android adt試試看。
作者: hugo3334059    時間: 2013-8-12 14:45
重新下載之後再貼上自己打的程式碼嗎?


作者: xjxuvup    時間: 2013-8-12 15:20
去下載Android SDK
裡面就有附Eclipse,打開後,先把環境設定好。
大致上就這樣
  1. developer.android.com/intl/zh-tw/sdk/index.html
複製代碼

作者: hugo3334059    時間: 2013-8-12 15:24
我是用Android SDK附的Eclipse寫的

developer.android.com/intl/zh-tw/sdk/index.html ??   

我還是個新手 qq
作者: xjxuvup    時間: 2013-8-12 16:30
那應該是沒問題啊@@
我也是直接下載sdk,執行裡面的Eclipse來寫project。
應該貼上去,改一改把有錯誤的地方修一修就能跑了。
作者: hugo3334059    時間: 2013-8-12 17:58
我顯示是沒有錯誤  但是跑就是有問題qq
作者: M98530065    時間: 2013-8-14 11:27
1.log 上來吧
2.com.example.aaa.R; 請砍掉
作者: hugo3334059    時間: 2013-8-14 22:20
M98530065 發表於 2013-8-14 11:27
1.log 上來吧
2.com.example.aaa.R; 請砍掉

LOG上來?     什麼意思啊?




歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1