美好的一天,我有这个链接:http://satiksme.daugavpils.lv/ru-tramvajs-nr-1-butlerova-iela-stacija
请选择源代码视图或使用:
view-source:http://satiksme.daugavpils.lv/ru-tramvajs-nr-1-butlerova-iela-stacija
如果您使用CTRL + F
并放置var data =
,则可以找到JSON
对象。
问题是:我可以使用Volley解析它,还是根本不是JSON
?如果不是,我如何解析它到我的应用程序(SQLite)? (使用凌空,或者GSON)?
答案 0 :(得分:2)
你可以用Volley& GSON,但你必须做一些工作:
var data =
以获取正确的行号。var data =
部分您可能希望implement a custom request执行parseNetworkResponse(NetworkResponse response)
方法中的所有繁重工作。这将确保所有长任务都将在主线程中执行,并且不会冻结您的应用。
答案 1 :(得分:2)
@ pdegand59的帖子是g8,但如果你仍然在努力解决这个问题,那么这里是演示。
private static TextView text;
Pattern MY_PATTERN = Pattern.compile("var data = (.*)");
String url="http://satiksme.daugavpils.lv/ru-tramvajs-nr-1-butlerova-iela-stacija";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.text);
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
//here you are downloading your page into a response string
public void onResponse(String response) {
//regexp search for data
Matcher m = MY_PATTERN.matcher(response);
if (m.find()) {
String extracted = m.group(1).trim();
try {
//HERE is Json obj you are looking for
JSONObject obj = new JSONObject(extracted);
int spacesToIndentEachLevel = 2;
text.setText(obj.toString(spacesToIndentEachLevel));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
text.setText("error");
}
});
queue.add(stringRequest);
}
<强> activity_main.xml中强>
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
</ScrollView>
在build.gradle中,您还需要compile 'com.mcxiaoke.volley:library-aar:1.0.0'
或类似于您的Volley的东西。
在清单中添加<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
。