涉及到的原生技术:
1.原生技术实现网络异步请求
1.原生技术解析json数据
实现步骤:
实现代码:
**第一二步比较简单,直接跳过
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.imooc.demo.R;
import com.imooc.demo.app.model.LessonInfo;
import com.imooc.demo.app.model.LessonResult;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
()
public class RequestDataActivity extends AppCompatActivity {
public static final String URL_STRING = "http://www.imooc.com/api/teacher?type=2&page=1";
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.list_view_demo);
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.header_list_demo, null);
mListView.addFooterView(view);
new AppAsyncTask().execute();
}
public class AppListAdapter extends BaseAdapter {
private Context mContext;
private List<LessonInfo> mInfos;
public AppListAdapter(Context context, List<LessonInfo> infos) {
mContext = context;
mInfos = infos;
}
@Override
public int getCount() {
return mInfos.size();
}
@Override
public Object getItem(int position) {
return mInfos.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.item_demo_list, null);
/ 获取控件
viewHolder.nameTextView = (TextView) convertView.findViewById(R.id.title_text_view);
viewHolder.avatarImageView = (ImageView) convertView.findViewById(R.id.icon_image_view);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
/和数据之间进行绑定
viewHolder.nameTextView.setText(mInfos.get(position).getName());
/设置avatarImageView空间消失
viewHolder.avatarImageView.setVisibility(View.GONE);
return convertView;
}
class ViewHolder {
ImageView avatarImageView;
TextView nameTextView;
}
}
public class AppAsyncTask extends AsyncTask<Void, Integer, String> {
@Override
protected String doInBackground(Void... params) {
异步耗时请求
return request(URL_STRING);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
处理数据
LessonResult lessonResult = new LessonResult();
try {
JSONObject jsonObject = new JSONObject(result);
int status = jsonObject.getInt("status");
String message = jsonObject.getString("msg");
lessonResult.setStatus(status);
lessonResult.setMessage(message);
List<LessonInfo> lessonInfos = new ArrayList<>();
JSONArray dataArray = jsonObject.getJSONArray("data");
for (int i = 0; i < dataArray.length(); i++) {
LessonInfo lessonInfo = new LessonInfo();
JSONObject tempJsonObject = (JSONObject) dataArray.get(i);
lessonInfo.setID(tempJsonObject.getInt("id"));
lessonInfo.setName(tempJsonObject.getString("name"));
lessonInfos.add(lessonInfo);
}
lessonResult.setLessonInfos(lessonInfos);
} catch (JSONException e) {
e.printStackTrace();
}
mListView.setAdapter(new AppListAdapter(RequestDataActivity.this, lessonResult.getLessonInfos()));
}
/实现网络请求(原生代码)
private String request(String urlString) {
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(30000);
connection.setRequestMethod("GET");
connection.connect();
int responseCode = connection.getResponseCode();
String responseMessage = connection.getResponseMessage();
String result = null;
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStreamReader inputStreamReader = new InputStreamReader(connection.getInputStream());
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
result = stringBuilder.toString();
} else {
}
return result;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
}