我从这里得到了非常简单的 JSON 格式数据,它看起来像这样:
{
"date" : "2013-11-01",
"gold" : "1317.29",
"silver" : "21.90",
"platinum" : "1458.00"
}
我只需要获取“gold”标签的值。
我的代码是:
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;
public class JsonActivity extends Activity {
static String jsonUrl = "http://services.packetizer.com/spotprices/?f=json";
static String gold = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_json);
new MyAsyncTask().execute();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.json, menu);
return true;
}
private class MyAsyncTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... arg0) {
DefaultHttpClient httpCl = new DefaultHttpClient(new
BasicHttpParams());
HttpPost httpP = new HttpPost(jsonUrl);
httpP.setHeader("Content-type", "application/json");
InputStream in = null;
String result = null;
try {
HttpResponse response = httpCl.execute(httpP);
HttpEntity entity = response.getEntity();
in = entity.getContent();
BufferedReader reader = new BufferedReader(new
InputStreamReader(in, "UTF-8"), 8);
StringBuilder sbuilder = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sbuilder.append(line + "\n");
}
result = sbuilder.toString();
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if(in != null)
in.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
JSONObject jsonObj;
try {
jsonObj = new JSONObject(result);
gold = jsonObj.getString("gold");
}
catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
TextView goldTV = (TextView)findViewById(R.id.goldPrice);
goldTV.setText("good price with Json" + gold);
super.onPostExecute(result);
}
}
}
但是,当我运行它时,它String gold
总是返回null
。我想不通为什么?谁能告诉我出了什么问题?谢谢
更新 添加了一个屏幕截图: