//CharStreams依赖
implementation 'com.google.guava:guava:16.0.1'
//main
public class MainActivity extends AppCompatActivity {
public static final String TAG = MainActivity.class.getSimpleName();
private static final int CODE_UPDATE_UI = 1;
private String spec = "https://suggest.taobao.com/sug?code=utf-8&q=%E6%89%8B%E6%9C%BA";
private ListView listView;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case CODE_UPDATE_UI:
// 在界面上展示列表
listView.setAdapter(new PhoneListAdapter(MainActivity.this, (List<List<String>>) msg.obj));
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.list_view);
boolean netIsConnection = isNetConnection();
if (netIsConnection) {
// 获取网络数据
getDataFromServer();
} else {
// 弹出对话框
new AlertDialog
.Builder(this)
.setTitle("提示!")
.setMessage("网络未连接,是否打开网络")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(Settings.ACTION_NETWORK_OPERATOR_SETTINGS));
}
})
.setNegativeButton("取消", null)
.show();
}
}
/**
* 从服务器获取数据
*/
private void getDataFromServer() {
// 1. 需要先开启一个线程
new Thread() {
@Override
public void run() {
// 请求网络数据
try {
URL url = new URL(spec);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 设置
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
connection.setRequestMethod("GET");
// 判断响应吗
if (connection.getResponseCode() == 200) {
// 使用Guava 把字节流转成成字符串
String text = CharStreams
.toString(new InputStreamReader(connection.getInputStream(), "UTF-8"));
Log.i(TAG, "result:" + text);
// 使用Gson将字符串转换成bean
Gson gson = new Gson();
ResultBean resultBean = gson.fromJson(text, ResultBean.class);
List<List<String>> result = resultBean.getResult();
// 需要把数据发送到主线程 更新UI
Message message = Message.obtain();
message.what = CODE_UPDATE_UI;
message.obj = result;
mHandler.sendMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
/**
* 判断网络是否连接
*
* @return
*/
private boolean isNetConnection() {
ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
if (networkInfo == null) {
return false;
} else {
return networkInfo.isAvailable();
}
}
}
//上面的是main的
//adapter
public class PhoneListAdapter extends BaseAdapter {
private Context context;
private List<List<String>> result;
public PhoneListAdapter(Context context, List<List<String>> result) {
this.context = context;
this.result = result;
}
@Override
public int getCount() {
return result == null ? 0 : result.size();
}
@Override
public Object getItem(int position) {
return result.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.phone_item, null, false);
holder.tvPhoneName = convertView.findViewById(R.id.tv_phone_name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvPhoneName.setText(result.get(position).get(0));
return convertView;
}
class ViewHolder {
TextView tvPhoneName;
}
}