duping 发表于 2021-10-27 22:44

强烈支持楼主ing……

joneqiang 发表于 2021-10-28 00:40

看到这帖子真是高兴!

Sakura 发表于 2021-10-28 07:38

强烈支持楼主ing……

golden 发表于 2021-10-28 07:51

强烈支持楼主ing……

夜月薇凉映银弩 发表于 2021-10-28 07:58

强烈支持楼主ing……

huangjiloqw 发表于 2021-10-28 08:12

强烈支持楼主ing……

ethan 发表于 2021-10-28 08:34

public class MainActivity extends AppCompatActivity {

    private static final int WHAT_SUCCESS = 1;
    private static final int WHAT_FAIL = 2;

    private ListView lv_main;
    private LinearLayout ll_main_loading;
    private List<ShopInfo> data;
    private ShopInfoAdapter adapter;

    private Handler handler = new Handler() {
      @Override
      public void handleMessage(@NonNull Message msg) {
            switch (msg.what) {
                case WHAT_SUCCESS:
                  ll_main_loading.setVisibility(View.GONE);
                  // 显示列表
                  lv_main.setAdapter(adapter);
                  break;
                case WHAT_FAIL:
                  ll_main_loading.setVisibility(View.GONE);
                  Toast.makeText(MainActivity.this, "加载数据失败!", (int) 1).show();
                  break;
                default:
            }
      }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      lv_main = findViewById(R.id.lv_main);
      ll_main_loading = findViewById(R.id.ll_main_loading);
      adapter = new ShopInfoAdapter();

      // 1.主线程,显示提示视图
      ll_main_loading.setVisibility(View.VISIBLE);
      // 2.分线程,联网请求
      // 启动分线程请求服务器动态加载数据并显示
      new Thread(() -> {
            try {
                String jsonStr = requestJson();
                System.out.println(jsonStr);
                Gson gson = new Gson();
                Log.e("gson:", gson + "");
                data = gson.fromJson(jsonStr, new TypeToken<List<ShopInfo>>() {
                }.getType());
                Log.e("json:", data + "");
                // 3.主线程,更新界面
                // 发送请求成功的消息
                handler.sendEmptyMessage(WHAT_SUCCESS);
            } catch (Exception e) {
                e.printStackTrace();
                // 发送请求失败的消息
                handler.sendEmptyMessage(WHAT_FAIL);
            }
      }).start();
    }

    /**
   * 联网请求得到json字符串
   *
   * @return
   */
    private String requestJson() throws Exception {
      String result = "";
      // 192.168.124.4
      // 192.168.0.103
      String path = "http://192.168.124.4:9999/vod/gets";
      // 1.得到连接对象
      URL url = new URL(path);
      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
      //(4)设置连接超时,读取数据超时
      connection.setConnectTimeout(5000);
      connection.setReadTimeout(5000);
      //(5)连接服务器
      connection.connect();
      int responseCode = connection.getResponseCode();
      if (responseCode == 200) {
            //(6)发请求,得到响应数据
            InputStream is = connection.getInputStream();
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            byte[] buffer = new byte;
            int len = -1;
            while ((len = is.read(buffer)) != -1) {
                byteArrayOutputStream.write(buffer, 0, len);
            }
            byteArrayOutputStream.close();
            is.close();
            result = byteArrayOutputStream.toString();
            // (7)断开连接
            connection.disconnect();
      } else {
            // 也可以抛出异常
      }
      return result;
    }

    class ShopInfoAdapter extends BaseAdapter {

      @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 name = convertView.findViewById(R.id.tv_item_name);
            TextView id = convertView.findViewById(R.id.tv_item_content);
            ImageView imageView = convertView.findViewById(R.id.iv_item_icon);
            // 设置数据显示
            name.setText(shopInfo.getVideoName());
            id.setText(shopInfo.getId());
            // 根据图片路径启动分线程动态请求服务加载图片并显示
            return convertView;
      }
    }
}

vxiaochaov 发表于 2021-10-28 08:38

多谢楼主的分享!

熊山君 发表于 2021-10-28 16:21

大佬

tsfzl 发表于 2021-10-29 11:17

真是难得给力的帖子啊。
页: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15
查看完整版本: 操作系统实战45讲