1. 程式人生 > >遠程請求json數據,list中顯示

遠程請求json數據,list中顯示

err static == sage arr near findview stack set

技術分享圖片
public class MainActivity extends Activity {

    protected static final int WHAT_REQUEST_SUCCESS = 1;
    protected static final int WHAT_REQUEST_ERROR = 2;
    private ListView lv_main;
    private LinearLayout ll_main_loading;
    private List<ShopInfo> data;
    private ShopInfoAdapter adapter;
    
private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { switch (msg.what) { case WHAT_REQUEST_SUCCESS: ll_main_loading.setVisibility(View.GONE); //顯示列表 lv_main.setAdapter(adapter);
break; case WHAT_REQUEST_ERROR: ll_main_loading.setVisibility(View.GONE); Toast.makeText(MainActivity.this, "加載數據失敗", Toast.LENGTH_SHORT).show(); break; default: break; } } }; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv_main = (ListView) findViewById(R.id.lv_main); ll_main_loading = (LinearLayout) findViewById(R.id.ll_main_loading); adapter = new ShopInfoAdapter(); //1. 主線程, 顯示提示視圖 ll_main_loading.setVisibility(View.VISIBLE); //2. 分線程, 聯網請求 //啟動分線程請求服務器動態加載數據並顯示 new Thread(){ public void run() { //聯網請求得到jsonString try { String jsonString = requestJson(); //解析成List<ShopInfo> data = new Gson().fromJson(jsonString, new TypeToken<List<ShopInfo>>(){}.getType()); //3. 主線程, 更新界面 handler.sendEmptyMessage(WHAT_REQUEST_SUCCESS);//發請求成功的消息 } catch (Exception e) { e.printStackTrace(); handler.sendEmptyMessage(WHAT_REQUEST_ERROR);//發送請求失敗的消息 } } }.start(); } /** * 聯網請求得到jsonString * @return * @throws Exception */ private String requestJson() throws Exception { String result = null; String path = "http://192.168.10.165:8080/L05_Web/ShopInfoListServlet"; //1. 得到連接對象 URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //2. 設置 connection.setConnectTimeout(5000); connection.setReadTimeout(5000); //連接 connection.connect(); //發請求並讀取服務器返回的數據 int responseCode = connection.getResponseCode(); if(responseCode==200) { InputStream is = connection.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = -1; while ((len = is.read(buffer)) != -1) { baos.write(buffer, 0, len); } baos.close(); is.close(); connection.disconnect(); result = baos.toString(); } else { //也可以拋出運行時異常 } return result; } class ShopInfoAdapter extends BaseAdapter { private ImageLoader imageLoader; public ShopInfoAdapter() { imageLoader = new ImageLoader(MainActivity.this, R.drawable.loading, R.drawable.error); } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView==null) { convertView = View.inflate(MainActivity.this, R.layout.item_main, null); } //得到當前行的數據對象 ShopInfo shopInfo = data.get(position); //得到當前行的子View TextView nameTV = (TextView) convertView.findViewById(R.id.tv_item_name); TextView priceTV = (TextView) convertView.findViewById(R.id.tv_item_price); ImageView imageView = (ImageView) convertView.findViewById(R.id.iv_item_icon); //設置數據 nameTV.setText(shopInfo.getName()); priceTV.setText(shopInfo.getPrice()+"元"); String imagePath = shopInfo.getImagePath(); //根據圖片路徑啟動分線程動態請求服務加載圖片並顯示 imageLoader.loadImage(imagePath, imageView); return convertView; } } }
View Code
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ListView
        android:id="@+id/lv_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

    <LinearLayout
        android:id="@+id/ll_main_loading"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" 
        android:gravity="center"
        android:visibility="gone">

        <ProgressBar
            style="?android:attr/progressBarStyleLarge"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="正在加載中..." />

    </LinearLayout>

</FrameLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/iv_item_icon"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:src="@drawable/ic_launcher"/>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" 
        android:gravity="center_vertical"
        android:layout_marginLeft="10dp">

        <TextView
            android:id="@+id/tv_item_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="名稱" 
            android:textSize="18sp"/>
        
        <TextView
            android:id="@+id/tv_item_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="內容" 
            android:textSize="18sp"/>

    </LinearLayout>
</LinearLayout>

遠程請求json數據,list中顯示