调用requestData()函数

时间:2015-04-22 10:54:38

标签: android json

我正在尝试从本地服务器获取JsonObject,这是我的对象:

[
   {
      "id":2,
      "latitude":34.042542,
      "longitude":-4.997182,
      "title":"zone1",
      "icone":"http://192.168.1.50/Heloo/images/icone.png"
   }
]

我想将3个变量( JsonLat 设置为纬度/ JsonLong 为双倍经度/ JsonName 为标题的字符串)但是执行我的应用程序后,我无法获得此值。

  • 我的 requestData(网址)位于 onCreate()之后 setContentView()
  • 这是我的HttpManager类:

        import java.io.BufferedReader;
        import java.io.IOException;
        import java.io.InputStreamReader;
        import java.net.HttpURLConnection;
        import java.net.URL;
    
    
    public class HttpManager {
    
    public static String getData(String uri) {
    
    BufferedReader reader = null;
    
    try {
        URL url = new URL(uri);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
    
        StringBuilder sb = new StringBuilder();
        reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
    
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    
        return sb.toString();
    
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }
    }
    
    }
    
    }
    
  • 这是我的requestData()定义和MyTask类:

    public void requestData(String uri) {
    MyTask task = new MyTask();
    task.execute(uri);
    }
    
    public class MyTask extends AsyncTask<String, String, String> {
    
    @Override
    protected void onPreExecute() {
    //          updateDisplay("Starting task");
    
        //tasks.add(this);
    }
    
    @Override
    protected String doInBackground(String... params) {
    
        String content = HttpManager.getData(params[0]);
        return content;
    }
    
    @Override
    protected void onPostExecute(String result) {
        try {
    
               JSONArray cast = new JSONArray(result);
                 for (int i=0; i<cast.length(); i++) {
                JSONObject Marker = new JSONObject(cast.get(i).toString());
                JsonLat = Marker.getDouble("latitude");
                Jsonlong = Marker.getDouble("longitude");
                JsonName = Marker.getString("title");
            }
    
        } catch (JSONException e) {
            e.printStackTrace();
        }
    
    }
    @Override
    protected void onProgressUpdate(String... values) {
    //          updateDisplay(values[0]);
    }
    
    }
    

    编辑:我尝试使用try {}中的log.v显示值,我可以看到我的值,但是当我尝试使用try {}之外的值时,它不会工作,当我尝试将一个函数与JsonLat,Jsonlng,JsonName作为参数应用于try {}时,它不起作用似乎有一个问题与try {}或我不知道! !!!!

1 个答案:

答案 0 :(得分:0)

实际上,当我尝试使用其他随机JSON数据时,这是有效的。我认为你的问题是使用getDouble()方法。您可以使用getString()方法将它们全部作为字符串。然后你可以用Java进行转换。