我正在尝试解析从我的Android应用中的URL提取的JSON结果…
我已经在Internet上尝试了一些示例,但无法使其正常工作。JSON数据如下所示:
[
{
"city_id": "1",
"city_name": "Noida"
},
{
"city_id": "2",
"city_name": "Delhi"
},
{
"city_id": "3",
"city_name": "Gaziyabad"
},
{
"city_id": "4",
"city_name": "Gurgaon"
},
{
"city_id": "5",
"city_name": "Gr. Noida"
}
]
提取URL和解析JSON数据的最简单方法是在列表视图中显示它
您可以使用AsyncTask
,您必须进行自定义以满足您的需求,但是类似以下内容
异步任务有三种主要方法:
onPreExecute()
-最常用于设置和启动进度对话框
doInBackground()
-建立连接并从服务器接收响应(请勿尝试将响应值分配给GUI元素,这是一个常见错误,无法在后台线程中完成)。
onPostExecute()
-这里我们不在后台线程中,因此我们可以使用响应数据进行用户界面操作,或者简单地将响应分配给特定的变量类型。
首先,我们将启动类,初始化一个String
以将结果保存在方法外部但在类内部,然后运行onPreExecute()
方法以建立简单的进度对话框。
class MyAsyncTask extends AsyncTask<String, String, Void> {
private ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
InputStream inputStream = null;
String result = "";
protected void onPreExecute() {
progressDialog.setMessage("Downloading your data...");
progressDialog.show();
progressDialog.setOnCancelListener(new OnCancelListener() {
public void onCancel(DialogInterface arg0) {
MyAsyncTask.this.cancel(true);
}
});
}
然后,我们需要建立连接以及我们如何处理响应:
@Override
protected Void doInBackground(String... params) {
String url_select = "http://yoururlhere.com";
ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
try {
// Set up HTTP post
// HttpClient is more then less deprecated. Need to change to URLConnection
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url_select);
httpPost.setEntity(new UrlEncodedFormEntity(param));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
// Read content & Log
inputStream = httpEntity.getContent();
} catch (UnsupportedEncodingException e1) {
Log.e("UnsupportedEncodingException", e1.toString());
e1.printStackTrace();
} catch (ClientProtocolException e2) {
Log.e("ClientProtocolException", e2.toString());
e2.printStackTrace();
} catch (IllegalStateException e3) {
Log.e("IllegalStateException", e3.toString());
e3.printStackTrace();
} catch (IOException e4) {
Log.e("IOException", e4.toString());
e4.printStackTrace();
}
// Convert response to string using String Builder
try {
BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"), 8);
StringBuilder sBuilder = new StringBuilder();
String line = null;
while ((line = bReader.readLine()) != null) {
sBuilder.append(line + "\n");
}
inputStream.close();
result = sBuilder.toString();
} catch (Exception e) {
Log.e("StringBuilding & BufferedReader", "Error converting result " + e.toString());
}
} // protected Void doInBackground(String... params)
最后,在这里我们将分析返回值,在此示例中,它是一个JSON数组,然后关闭该对话框:
protected void onPostExecute(Void v) {
//parse JSON data
try {
JSONArray jArray = new JSONArray(result);
for(i=0; i < jArray.length(); i++) {
JSONObject jObject = jArray.getJSONObject(i);
String name = jObject.getString("name");
String tab1_text = jObject.getString("tab1_text");
int active = jObject.getInt("active");
} // End Loop
this.progressDialog.dismiss();
} catch (JSONException e) {
Log.e("JSONException", "Error: " + e.toString());
} // catch (JSONException e)
} // protected void onPostExecute(Void v)
} //class MyAsyncTask extends AsyncTask<String, String, Void>
这是我的代码,我们在MainActivity中使用。我在主活动中使用以下代码,但它显示空指针异常。 这是http代码... 这是logcat中显示的错误.... 04-26 05:54:40.534 5884-5884/com.example.converbiz.apidemo E/AndroidRuntime: 致命异常: main java.lang.NullPointerException
我知道我的问题已经被问了很多,但是我花了相当多的时间搜索了SO和谷歌,试图更好地理解这个概念,但没有成功。我见过许多不同的实现,这也让我得到了一些关于我的具体情况的建议。 我的目标 我需要对php文件执行post请求,目标是最终用一些json数据填充列表活动中的字段。 HTTP POST响应 这是我从服务器返回的响应数据的格式,它似乎是数组的JSON对象(?)。 第一个问题 下面的代码是我用来阅读
问题内容: 这是我正在处理的代码: 我想在列表视图上显示它们。您有任何教程可以帮助我入门吗?我是Web服务的新手。谢谢。 问题答案: 列表视图中最受欢迎的教学作品之一,可能会帮助您: - 拉维的博客 解析json之后要执行的步骤: 您可以使用jackson库用一行代码来解析json。 (单击此链接以获取有关对象映射教程的更多信息)
问题内容: 我在Angular中显示JSON数据时遇到麻烦。我已成功将数据从后端发送到前端(角度),但无法显示它们。 我已经尝试在JSFiddle上模拟类似的情况,尽管我已经从后端准备了数据 获取/发送数据->后端: 获取数据->前端(角度) 带有ng-repeat指令的HTML部分: 谁知道是什么问题吗? 问题答案: 据我所知,您将对象存储为JSON,但从未对其进行解析。因此使用 代替 应该解决
我想在android应用程序中显示视频。我在谷歌上搜索了一下,发现了下面的代码 VideoView VideoView=(VideoView)findViewById(r.id.VideoView); 谢谢 编辑:经过一些工作,我知道其中一个原因是Android版本4.0.3。上面提到的代码仅适用于4.2.2中的示例url(如http://download.itcuties.com/teaser/