我想从android中的url获取一个值。
例如:
在android中,我可以像这样编写app id:
<string name="app_id">123456789012</string>
但我希望从这个网址获取app_id
:
<string name="app_id">http://www.domain.com/index.php</string>
在http://www.domain.com/index.php中,唯一的app_id
写成123456789012
我想在字符串中检索此ID。
我在google上搜索了很多,我找到了“android volley”,但我知道如何使用它。
String url = "http://httpbin.org/get?site=code&network=tutsplus";
JsonObjectRequest jsonRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// the response is already constructed as a JSONObject!
try {
response = response.getJSONObject("args");
String site = response.getString("site"),
network = response.getString("network");
System.out.println("Site: "+site+"\nNetwork: "+network);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
Volley.newRequestQueue(this).add(jsonRequest);
答案 0 :(得分:0)
Egor在这个问题中回答:
Changing value of R.String Programmatically
您无法动态更改strings.xml。
你应该这样做的方法是从http://www.domain.com/index.php中检索数据,例如使用Volley库(http://developer.android.com/training/volley/index.html),Retrofit(http://square.github.io/retrofit/),甚至是AsyncTask。
最后,您需要解析内容(例如,如果它是XML或JSON),以便您可以在应用中使用它。
听起来很复杂,但你可以开始查看像http://www.vogella.com/tutorials/Retrofit/article.html
这样的教程希望它有所帮助!
答案 1 :(得分:0)
Android Volley是一个允许您轻松提出HTTP请求的框架。
当您尝试在浏览器中打开页面时,实际上是在向某个URL发出HTTP请求。您在网页上看到的所有内容都会以html代码或其他内容的形式返回。因此,如果您想从URL中检索某些数据,则需要对此URL发出http请求并解析响应。
如何使用volley执行请求:您需要从Request
排序类之一扩展自己的类,然后将其添加到请求查询(这意味着执行请求)
public class GetRequest extends Request<String> {
private Response.Listener<String> responseListener;
public GetRequest (String login, String password) {
super(Method.GET, http://www.domain.com/index.php,
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//parse your response here
}
};
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String parsed;
try {
parsed = String.valueOf(new String(response.data, HttpHeaderParser.parseCharset(response.headers)));
} catch (UnsupportedEncodingException e) {
parsed = String.valueOf(new String(response.data));
}
return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
}
@Override
protected void deliverResponse(String response) {
responseListener.onResponse(response);
}
}
您应该注意,在扩展Request类时,您需要指定已完成响应的类型。在当前示例中,它将是String。