main
- 请求网络json
- 调用Gson解析将json解析
- 主线程不能做多耗时操作,开启子线程通过Handler改变主线程UI
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import javax.xml.transform.Result;
public class MainActivity extends AppCompatActivity {
private Button huoqu;
private ListView main_listview;
private final int UPDATE_UI = 1;
private PhoneAdapter adapter;
private List<List<String>> list;
@SuppressLint("HandlerLeak")
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case UPDATE_UI:
list = (List<List<String>>) msg.obj;
adapter.setList(list);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
huoqu = findViewById(R.id.huoqu);
main_listview = findViewById(R.id.main_listview);
adapter = new PhoneAdapter(this);
main_listview.setAdapter(adapter);
huoqu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!panduan()){
//Toast.makeText(MainActivity.this,"当前网络不可用",Toast.LENGTH_SHORT).show();
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.ic_launcher_background);
builder.setTitle("当前网络不可用");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
}
new Thread(new Runnable() {
@Override
public void run() {
getInfo();
}
}).start();
}
});
main_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this,list.get(position)+"",Toast.LENGTH_SHORT).show();
}
});
}
//判断网络是否可用
private boolean panduan(){
ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = manager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isAvailable();
}
private String path = "https://suggest.taobao.com/sug?code=utf-8&q=%E6%89%8B%E6%9C%BA";
private void getInfo(){
try {
//打开URL地址
URL url = new URL(path);
//打开连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//设置请求方式
connection.setRequestMethod("GET");
//超时设置
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
//得到请求结果码
int responseCode = connection.getResponseCode();
if(responseCode == 200){
InputStream inputStream = connection.getInputStream();
String stream = stream(inputStream);
Gson gson = new Gson();
PhoneBean phoneBean = gson.fromJson(stream, PhoneBean.class);
handler.sendMessage(handler.obtainMessage(UPDATE_UI,phoneBean.getResult()));
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private String stream(InputStream is) throws IOException {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
StringBuilder builder = new StringBuilder();
for (String tmp = br.readLine(); tmp != null;tmp = br.readLine()){
builder.append(tmp);
}
return builder.toString();
}
}
BaseAdapter适配
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import javax.xml.transform.Result;
public class PhoneAdapter extends BaseAdapter {
private List<List<String>> list;
private Context context;
public PhoneAdapter(Context context) {
this.context = context;
list = new ArrayList<>();
}
public void setList(List<List<String>> list) {
this.list = list;
notifyDataSetChanged();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
/*/如果只取出以一个数据的话
List<String> strings = list.get(position);
strings.get(0);*/
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.item,parent,false);
holder = new ViewHolder();
holder.textView=convertView.findViewById(R.id.item_text);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(list.get(position).get(0));
return convertView;
}
class ViewHolder{
TextView textView;
}
}