0

私はこのすべてのアンドロイドプログラミングに不慣れです。いくつかのチュートリアルに従った後、JSON URL の解析に成功しました。基本的に、私がやりたいことは、最後に取得した文字列 (ipString) をテキストビューまたはリストビューとして出力することです。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d("Rami","Rami");
    DefaultHttpClient   httpclient = new DefaultHttpClient(new BasicHttpParams());
    HttpPost httppost = new HttpPost("http://jsonip.com");
    // Depends on your web service
    httppost.setHeader("Content-type", "application/json");

    InputStream inputStream = null;
    String result = null;
    try {
        HttpResponse response = httpclient.execute(httppost);           
        HttpEntity entity = response.getEntity();

        inputStream = entity.getContent();
        // json is UTF-8 by default
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
        StringBuilder sb = new StringBuilder();

        String line = null;
        while ((line = reader.readLine()) != null)
        {
            sb.append(line + "\n");

        }
        result = sb.toString();
        JSONObject jObject = new JSONObject(result);
        String ipString = jObject.getString("ip");
        Log.d("ip", ipString);
    } catch (Exception e) { 
        // Oops
    }
    finally {
        try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
    }




}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

そこから、私は何をすべきでしょうか?

ありがとう

4

1 に答える 1

0

注: URL http://jsonip.comによって返される「json」は無効です ( http://jsonlint.com/でのテストによると)。

これは次のことを示しています。

{
    ip: "216.49.181.254",
    about: "/about",
    Pro!: "http://getjsonip.com"
}

実際には次のようになります。

{
    "ip": "216.49.181.254",
    "about": "/about",
    "Pro!": "http://getjsonip.com"
}

Web からの JSON フェッチを簡素化するには、AndroidQuery ( AQuery ) を検討することをお勧めします。単純な JSON 呼び出しがあり、結果を出力したり、返されたときに結果を反復処理したりできます。

このAQueryライブラリを使用すると、すでに AsyncTask 内にいる場合は、JSON を同期的に取得することもできます。

JSON を取得するコードの例を次に示します。

public void asyncJson(){

    //perform a Google search in just a few lines of code

    String url = "http://www.google.com/somesearch";             
    aq.ajax(url, JSONObject.class, this, "jsonCallback");

}

public void jsonCallback(String url, JSONObject json, AjaxStatus status){

    if( json != null ){
        //successful ajax call

        String ipString = "";

        try {
            ipString = json.getString("ip");
        } catch (JSONException e) {
            e.printStackTrace();
        }

        Log.d("ip", ipString);//do this if you just want to log the ipString

        //or, do this to set the "ip" string into a TextView 
        //referenced by "R.id.mytextview"
        aq.id(R.id.mytextview).text(ipString); //this is shorthand AQuery syntax
    } else {          
        //ajax error
    }

}
于 2013-08-30T20:28:04.007 に答える