此过程使用alibaba的fastjson方法,具体实现步骤如下:
1.在Android Studio中需要Gradle依赖。
在build.gradle中添加依赖
compile 'com.alibaba:fastjson:1.1.55.android'
2.在Activity中
String json = null; //成功获取网页的json数据 try { String url = "http://search.kuwo.cn/r.s?all="+searchMessage+"&ft=music&itemset=web_2013&client=kt&pn=0&rn=150&rformat=json&encoding=utf8"; json = HtmlService.getHtml(url); } catch (Exception e) { e.printStackTrace(); Log.d(TAG,"------------>"+"获取json失败"); }
至此,可以获取到json
//接下来将获取到的json数据进行解析 //这是获取一条数据 //JSON.parseObject(json, KuWoInfo.class); //这是获取多条数据 //先格式化一下JSON的格式 json = json.replace("\\&", "&"); json = json.replace(" ", " "); json = "[" + json + "]"; //使用阿里的fastjson进行解析 List<KuWoInfo> list = JSON.parseArray(json,KuWoInfo.class); Log.d(TAG,"--------------->"+list.get(0).getAbslist()[0].getSONGNAME());
至此可以获取到指定的List。
已下贴上代码:
Activity:
/** * Created by 在旭 on 2018/2/10. */ public class UrlActivity extends Fragment{ private EditText editText; private Button button; private MyHandler myhandler; private final String TAG = "UrlActivity"; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.activity_url,null); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //找到控件View initView(); //初始化事件 initEvents(); } private void initEvents() { button.setOnClickListener(new search_button_click()); } private void initView() { editText = (EditText) getActivity().findViewById(R.id.url_EditText); button = (Button) getActivity().findViewById(R.id.url_search_button); } class search_button_click implements View.OnClickListener{ @Override public void onClick(View v) { HandlerThread handlerthread = new HandlerThread("handler_thread"); handlerthread.start(); myhandler = new UrlActivity.MyHandler(handlerthread.getLooper()); myhandler.post(thread); } } class MyHandler extends Handler { public MyHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { } } Runnable thread = new Runnable() { @Override public void run() { /*MediaScannerConnection.scanFile(getActivity(), new String[] { Environment .getExternalStorageDirectory().getAbsolutePath() }, null, null); Message message = myhandler.obtainMessage(); message.arg1= AudioUtils.getAllSongs(getActivity()).size(); myhandler.sendMessage(message);*/ String searchMessage = ""; if(TextUtils.isEmpty(editText.getText())){ Toast.makeText(getActivity(),"请输入后操作",Toast.LENGTH_SHORT).show(); Log.d(TAG,"flag------------->"+"null"); return; } else{ searchMessage = String.valueOf(editText.getText()); } Log.d(TAG,"searchMessage------------->"+searchMessage); String json = null; //成功获取网页的json数据 try { String url = "http://search.kuwo.cn/r.s?all="+searchMessage+"&ft=music&itemset" + "=web_2013&client=kt&pn=0&rn=150&rformat=json&encoding=utf8"; json = HtmlService.getHtml(url); } catch (Exception e) { e.printStackTrace(); Log.d(TAG,"------------>"+"获取json失败"); } //接下来将获取到的json数据进行解析 //这是获取一条数据 //JSON.parseObject(json, KuWoInfo.class); //这是获取多条数据 //先格式化一下JSON的格式 json = json.replace("\\&", "&"); json = json.replace(" ", " "); json = "[" + json + "]"; //使用阿里的fastjson进行解析 List<KuWoInfo> list = JSON.parseArray(json,KuWoInfo.class); Log.d(TAG,"--------------->"+list.get(0).getAbslist()[0].getSONGNAME()); } }; }
KuWoInfo
package model; /** * Created by 在旭 on 2018/3/4. */ public class KuWoInfo { private abslist[] abslist; public KuWoInfo.abslist[] getAbslist() { return abslist; } public void setAbslist(KuWoInfo.abslist[] abslist) { this.abslist = abslist; } public class abslist { private String ALBUM; private String ARTIST; private String MP3RID; private String SONGNAME; public String getSONGNAME() { return SONGNAME; } public String getALBUM() { return ALBUM; } public void setALBUM(String ALBUM) { this.ALBUM = ALBUM; } public String getARTIST() { return ARTIST; } public void setARTIST(String ARTIST) { this.ARTIST = ARTIST; } public String getMP3RID() { return MP3RID; } public void setMP3RID(String MP3RID) { this.MP3RID = MP3RID; } public void setSONGNAME(String SONGNAME) { this.SONGNAME = SONGNAME; } } }
HtmlService
package Service; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; /** * Created by 在旭 on 2018/3/4. */ public class HtmlService { public static String getHtml(String path) throws Exception { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5 * 1000); InputStream inStream = conn.getInputStream();//通过输入流获取html数据 byte[] data = readInputStream(inStream);//得到html的二进制数据 String html = new String(data, "UTF-8"); return html; } public static byte[] readInputStream(InputStream inStream) throws Exception{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while( (len=inStream.read(buffer)) != -1 ){ outStream.write(buffer, 0, len); } inStream.close(); return outStream.toByteArray(); } }