- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试解析整个数组时,它可以正常工作,但是当我尝试从 URL 中解析数组元素(如 ID、t、l 等)时,代码不起作用。
请详细说明,我是菜鸟:)
PS:我相信整个数据都是Strings形式的。喜欢:“l”:“219.20”。
网址如下: http://finance.google.com/finance/info?q=BSE:SBIN
其他资源如下:
MainActivity.java
public class MainActivity extends AppCompatActivity {
public String theUrl;
public String stockName;
ListView lvStock;
HttpURLConnection connection;
URL url;
InputStream inputStream;
BufferedReader bufferedReader;
StringBuffer stringBuffer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvStock = (ListView) findViewById(R.id.lvStocks);
stockName = "SBIN";
theUrl = "http://finance.google.com/finance/info?q=BSE:" + stockName;
Toast.makeText(MainActivity.this, "You have selected : " + stockName, Toast.LENGTH_SHORT).show();
}
public class RefreshStock extends AsyncTask<String, String, List<StockModel>> {
@Override
protected List<StockModel> doInBackground(String... params) {
try {
url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
inputStream = connection.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
stringBuffer = new StringBuffer();
String line = "";
while ((line = bufferedReader.readLine()) != null)
stringBuffer.append(line + "\n");
String data = stringBuffer.toString();
return parseJSON(data);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null)
connection.disconnect();
try {
if (bufferedReader != null)
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
private List<StockModel> parseJSON(String json) {
List<StockModel> stockModelList = new ArrayList<>();
//Using it to remove the two forward slashes in the json online.
json = json.substring(2);
try {
StockModel stockModel = new StockModel();
JSONObject parentObject = new JSONObject();
JSONArray jsonArray = parentObject.getJSONArray(json);
JSONObject childObject = jsonArray.getJSONObject(0);
String stockId = childObject.getString("id");
String stockName = childObject.getString("t");
String stockRate = childObject.getString("l");
String stockChange = childObject.getString("c");
String stockChangePercent = childObject.getString("cp");
stockModel.setId(stockId);
stockModel.setT(stockName);
stockModel.setL(stockRate);
stockModel.setC(stockChange);
stockModel.setCp(stockChangePercent);
stockModelList.add(stockModel);
return stockModelList;
} catch (JSONException e) {
e.printStackTrace();
}
return stockModelList;
}
protected void onPostExecute(List<StockModel> result) {
super.onPostExecute(result);
//Toast.makeText(getApplicationContext(), new StringBuilder().append("").append(result.toString()).toString(), Toast.LENGTH_LONG).show();
StockAdapter adapter = new StockAdapter(getApplicationContext(), R.layout.listrow, result);
lvStock.setAdapter(adapter);
}
}
public class StockAdapter extends ArrayAdapter {
private List<StockModel> stockModelList;
private int resource;
private LayoutInflater inflater;
private StockAdapter(Context context, int resource, List<StockModel> objects) {
super(context, resource, objects);
stockModelList = objects;
this.resource = resource;
inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.listrow, null);
holder.stockID = (TextView) convertView.findViewById(R.id.txtStockID);
holder.stockName = (TextView) convertView.findViewById(R.id.txtStockName);
holder.stockRate = (TextView) convertView.findViewById(R.id.txtStockRate);
holder.stockChange = (TextView) convertView.findViewById(R.id.txtStockChange);
holder.stockChangePercent = (TextView) convertView.findViewById(R.id.txtStockChangePercent);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.stockID.setText(stockModelList.get(position).getId());
holder.stockName.setText(stockModelList.get(position).getT());
holder.stockRate.setText(stockModelList.get(position).getL());
holder.stockChange.setText(stockModelList.get(position).getC());
holder.stockChangePercent.setText(stockModelList.get(position).getCp());
return convertView;
}
}
private class ViewHolder {
private TextView stockRate;
private TextView stockChangePercent;
private TextView stockChange;
private TextView stockName;
private TextView stockID;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_refresh) {
new RefreshStock().execute(theUrl);
return true;
}
return super.onOptionsItemSelected(item);
}
}
另一个类如下:
package org.example.km.http2json.Models;
public class StockModel {
private String id;
private String t;
//private String e;
private String l;
//private String l_fix;
//private String l_cur;
//private String s;
//private String ltt;
//private String lt;
//private String llt_dts;
private String c;
//private String c_fix;
private String cp;
//private String cp_fix;
//private String ccol;
//private String pcls_fix;
public String getId(){
return id;
}
public void setId(String id){
this.id = id;
}
public String getT(){
return t;
}
public void setT(String t){
this.t = t;
}
public String getL(){
return l;
}
public void setL(String l){
this.l = l;
}
public String getC(){
return c;
}
public void setC(String c){
this.c = c;
}
public String getCp(){
return cp;
}
public void setCp(String cp){
this.cp = cp;
}
}
/*
// [
{
"id": "13564339"
,"t" : "SBIN"
,"e" : "NSE"
,"l" : "219.20" // Last Value
,"l_fix" : "219.20"
,"l_cur" : "Rs.219.20"
,"s": "0"
,"ltt":"3:56PM GMT+5:30"
,"lt" : "Jul 1, 3:56PM GMT+5:30"
,"lt_dts" : "2016-07-01T15:56:11Z"
,"c" : "+0.40" //Change
,"c_fix" : "0.40"
,"cp" : "0.18" //Change Percent
,"cp_fix" : "0.18"
,"ccol" : "chg"
,"pcls_fix" : "218.8" // Previous Closing
}
]
*/
最佳答案
// there is no data your parsing.. please check
JSONArray jsonArray = parentObject.getJSONArray("");
JSONObject childObject = jsonArray.getJSONObject(0);
String stockId = childObject.getString("id");
String stockName = childObject.getString("t");
String stockRate = childObject.getString("l");
String stockChange = childObject.getString("c");
String stockChangePercent = childObject.getString("cp");
注意:下面的数据将抛出解析器异常,删除前两个斜杠字符
// [ { "id": "13564339" ,"t" : "SBIN" ,"e" : "NSE" ,"l" : "219.20" ,"l_fix" : "219.20" ,"l_cur" : "Rs.219.20" ,"s": "0" ,"ltt":"3:56PM GMT+5:30" ,"lt" : "Jul 1, 3:56PM GMT+5:30" ,"lt_dts" : "2016-07-01T15:56:11Z" ,"c" : "+0.40" ,"c_fix" : "0.40" ,"cp" : "0.18" ,"cp_fix" : "0.18" ,"ccol" : "chg" ,"pcls_fix" : "218.8" } ]
关于android - 为什么这个 URL-JSON 解析代码在我提取标签时不起作用,但在我提取整个数组时有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38169646/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!