我有很簡單的JSON格式的數據,它看起來像這樣:我的Android JSON解析器沒有工作,爲什麼?從<a href="http://services.packetizer.com/spotprices/?f=json" rel="nofollow noreferrer">here</a>
{
"date" : "2013-11-01",
"gold" : "1317.29",
"silver" : "21.90",
"platinum" : "1458.00"
}
我只需要獲得「黃金」標籤的價值。
我的代碼是:
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
返回。我無法弄清楚爲什麼?誰能告訴我哪裏出了問題? 感謝
更新 的屏幕截圖說:
嘗試打印變量結果並檢查它是否包含任何內容 – Tejas
是否在logcat中看到任何錯誤消息? – Henry
在日誌中找不到任何錯誤cat – dhssa