0

我是android的新手。我需要从Web服务中获取值。这里我使用了json解析。输出的Json格式是{“flag”:0}。在这里,我需要获取 flag 的值并使用该值来启动另一种方法。我如何取 flag 的值。请帮我。我是这样用的。

public String objectvalue(String result){

    try {
        JSONObject obj=new JSONObject(result);

            String flag=obj.getString("flag");
            mString=flag;
            System.out.println(mString);


    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



    return mString;
}

但是我没有得到flag的值。这里的参数结果是从服务器输出的。ie,result={ "flag": 0 }

4

4 回答 4

0

You may try using AsyncTask for your concern. It's best and preffered way to fetch JSON data

Define AsyncTask like this ..

new BussinessOwnerHttpAsyncTask().execute();

and your AsyncTask class ..

class BussinessOwnerHttpAsyncTask extends AsyncTask<String, Void, String> {

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();

        // Progress dialog code goes over here ..

        pDialog = new ProgressDialog(getParent());
        pDialog.setMessage("Please wait ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }

    @Override
    protected String doInBackground(String... params) {

        //  Maintaining Shared preferences class for further...

        HttpClient httpclient = new DefaultHttpClient();

        String myUrl = Your_url_goes_over_here;


        String encodedURL = "";
        try {
            encodedURL = URLEncoder.encode(myUrl, "UTF-8");
        } catch (UnsupportedEncodingException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try {
            URL url = new URL(encodedURL);
            Log.d("asca", ""+url);
        } catch (MalformedURLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        Log.i("url", city_name + "~" + country_name);
        Log.d("location", request_url+encodedURL);
        HttpGet httpget = new HttpGet(request_url+encodedURL);

        try {
            httpresponse = httpclient.execute(httpget);
            System.out.println("httpresponse" + httpresponse);
            Log.i("response", "Response" + httpresponse);
            InputStream is = httpresponse.getEntity().getContent();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            StringBuilder sb = new StringBuilder();

            String recievingDataFromServer = null;
            while ((recievingDataFromServer = br.readLine()) != null) {
                Log.i("CHECK WHILE", "CHECK WHILE");
                sb.append(recievingDataFromServer);
            }

            myJsonString = sb.toString();
            Log.d("manish", myJsonString);
            serverSearchData = sb.toString();
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return sb.toString();
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        pDialog.dismiss();
        if (myJsonString.length() > 0) {
            try {
                myJsonObject = new JSONObject(myJsonString);

                String your_flag = myJsonObject.getString("flag");

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

}

Now you are good to go with your queries..

于 2014-01-03T04:31:34.407 回答
0
{  // JSONObject
   "flag": 0 
}

利用

JSONObject obj=new JSONObject(result);
int flag=obj.getInt("flag");

http://developer.android.com/reference/org/json/JSONObject.html

public int getInt (String name)

Added in API level 1
Returns the value mapped by name if it exists and is an int or can be coerced to an int.

Throws
JSONException   if the mapping doesn't exist or cannot be coerced to an int.

如果这不起作用,您需要发布更多信息。

于 2014-01-03T04:45:04.223 回答
0

整数的“标志”值格式,而不是字符串,这是执行此操作的简单代码:

int flagValues = jsonObject.getInt("flag");
Log.w("values ",String.valuesOf(flagValues));
于 2014-01-03T04:48:59.517 回答
0

首先,mString变量的声明在哪里?我假设它instance variable在你的java类中声明了这个方法,如果没有,请检查。

你有一个格式良好的 JSON,格式为

{ "flag": 0 }

因此将其转换为 aJSONObject应该可以正常工作。

用于提取flag键的值

这里有一个名为flag的键,JSONObject它有一个Integer值,您正在尝试使用getString()方法提取它。

您应该使用以下任一方法调用

optInt(字符串键)

获取与键关联的可选 int 值,如果没有这样的键或值不是数字,则为零。如果该值是一个字符串,则会尝试将其评估为一个数字。

int flag = optInt("flag");

或者

optInt(字符串键,int defaultValue)

获取与键关联的可选 int 值,如果没有这样的键或值不是数字,则获取默认值。如果该值是一个字符串,则会尝试将其评估为一个数字。

int flag = optInt("flag", 0);

你的代码有变化

public int objectValue(String result){
    int flag = 0;
    try {
        JSONObject obj=new JSONObject(result);
        flag = obj.optInt("flag");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return flag;
}

编辑:回答评论中的问题。

public String objectValue(String result){
    int flag = 0;
    try {
        JSONObject obj=new JSONObject(result);
        flag = obj.optInt("flag");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return String.valueOf(flag);
}

希望这可以帮助。

于 2014-01-03T05:03:23.687 回答