Android - 如何从网址获取价值

时间:2016-01-27 14:24:19

标签: php android

我想从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);

2 个答案:

答案 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。