通过慕课网的三个接口:
http://www.imooc.com/api/teacher?type=1
http://www.imooc.com/api/teacher?type=2
http://www.imooc.com/api/teacher?type=3&cid=1 (这个链接需要用到上面链接中data的id)
实现的功能具体为:
MainActivity点击慕课(TextView)
将会把一下的信息更新到UI界面上(DetailActivity)
如下
Gson需要在AndroidStudio添加Dependancies
具体的用法如下:
1.JSONObject
Gson gson = new Gson();
String data = job.getString("data");
Article article = gson.fromJson(data, Article.class);
2.JSONArray
Gson gson = new Gson();
//参数1:满足Json数组的字符串
//参数2:Type对象泛型将决定json字符串最后被转化成的类型
ArrayList<Outline> outlines = gson
.fromJson(data, new TypeToken<ArrayList<Outline>>(){}.getType());
具体的代码为
MainActivity.java
public class MainActivity extends Activity {
private TextView mooc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initData() {
new Thread(){
@Override
public void run() {
try {
URL url = new URL("http://www.imooc.com/api/teacher?type=2");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setReadTimeout(6000);
if(con.getResponseCode() == 200){
InputStream is = con.getInputStream();
byte[] buf = new byte[1024 * 512];
int len = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((len = is.read(buf)) > -1) {
baos.write(buf, 0, len);
}
String result = baos.toString();
Log.e("TAG", result);
String data = new JSONObject(result).getString("data");
Gson gson = new Gson();
//参数1:满足Json数组的字符串
//参数2:Type对象泛型将决定json字符串最后被转化成的类型
ArrayList<Outline> outlines = gson
.fromJson(data, new TypeToken<ArrayList<Outline>>(){}.getType());
//通过Log具体输出data信息
for(int i = 0; i < outlines.size(); i++){
Outline outline = outlines.get(i);
Log.e("TAG", outline.getId()
+ " " + outline.getLearner()
+ " " + outline.getPicBig()
+ " " + outline.getDescription());
}
}
} catch (JSONException e) {
e.printStackTrace();
}catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
private void initView() {
mooc = (TextView) findViewById(R.id.mooc_title);
mooc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, DetailActivity.class));
}
});
}
}
DetailActivity.java
public class DetailActivity extends Activity{
private TextView titleView, authorView, contentView;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Article a = (Article) msg.obj;
titleView.setText(a.getTitle());
authorView.setText(a.getAuthor());
contentView.setText(a.getContent());
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
initView();
initData();
}
private void initView() {
titleView = (TextView) findViewById(R.id.article_title);
authorView = (TextView) findViewById(R.id.article_author);
contentView = (TextView) findViewById(R.id.article_content);
}
private void initData() {
//网络请求不能在主线程中操作
new Thread() {
@Override
public void run() {
try {
//创建URL
URL url = new URL("http://www.imooc.com/api/teacher?type=3&cid=1");
//获取HttpURLConnection
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setReadTimeout(6000);
if(con.getResponseCode() == 200){
//将输入流转换为得到的输出流
InputStream is = con.getInputStream();
byte[] buf = new byte[1024 * 512];
int len = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((len = is.read(buf)) > -1) {
baos.write(buf, 0, len);
}
String result = baos.toString();
Log.e("TAG", result);
//创建JSONObject获取status
JSONObject job = new JSONObject(result);
int status = job.getInt("status");
//创建Gson,fromJson方法需传入
Gson gson = new Gson();
String data = job.getString("data");
//Article类封装data中数据
Article article = gson.fromJson(data, Article.class);
String msg = job.getString("msg");
//Log.e("TAG", status + " " + msg);
//将获得的Article放到Message的obj中,因为更新UI要在主线程中
Message message = handler.obtainMessage();
message.obj = article;
handler.sendMessage(message);
}
} catch (JSONException e) {
e.printStackTrace();
}catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
如下图:
具体字段为下图的数据,Outline类同理(Outline封装的第二个接口的data字段)
通过HttpURLConnection,Json,Gson的用法实现了基本的GET请求。
具体的应用还需要完善。