- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个工作 ListView ,它从我的数据库接收 JSON。但是当我尝试使用此链接时:我得到“解析数据 org.json.JSONException 时出错:值
JSON 输出是干净的,应该可以工作!我的 Activity
package com.spxc.ssa.streaming;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import com.actionbarsherlock.app.SherlockListActivity;
import com.actionbarsherlock.view.MenuItem;
import com.spxc.ssa.streaming.task.JsonAsync;
import com.spxc.ssa.streaming.task.JsonAsync.JsonListener;
public class ListShowsController extends SherlockListActivity implements
OnClickListener {
private ProgressDialog mDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.dblist);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle("Shows");
JsonAsync asyncTask = new JsonAsync();
// Using an anonymous interface to listen for objects when task
// completes.
asyncTask.setJsonListener(new JsonListener() {
@Override
public void onObjectReturn(JSONObject object) {
handleJsonObject(object);
}
});
// Show progress loader while accessing network, and start async task.
mDialog = ProgressDialog.show(this, getSupportActionBar().getTitle(),
getString(R.string.loading), true);
asyncTask.execute("");
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
}
return false;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
private void handleJsonObject(JSONObject object) {
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
try {
JSONArray shows = object.getJSONArray("items");
for (int i = 0; i < shows.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = shows.getJSONObject(i);
map.put("video_id", String.valueOf(i));
map.put("video_title", "" + e.getString("video_title"));
//map.put("season", "Season: " + e.getString("season"));
map.put("video_location", "" + e.getString("video_location"));
mylist.add(map);
}
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
ListAdapter adapter = new SimpleAdapter(this, mylist, R.layout.dbitems,
new String[] { "video_title", "video_location" }, new int[] { R.id.item_title,
R.id.item_subtitle });
setListAdapter(adapter);
final ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
@SuppressWarnings("unchecked")
HashMap<String, String> o = (HashMap<String, String>) lv
.getItemAtPosition(position);
Intent myIntent = new Intent(ListShowsController.this,
ShowsController.class);
myIntent.putExtra("video_title", o.get("video_title"));
//myIntent.putExtra("season", o.get("season"));
myIntent.putExtra("video_location", o.get("video_location"));
startActivity(myIntent);
}
});
if (mDialog != null && mDialog.isShowing()) {
mDialog.dismiss();
}
}
}
异步任务
package com.spxc.ssa.streaming.task;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.util.Log;
public class JsonAsync extends AsyncTask<String, Void, JSONObject> {
public interface JsonListener {
public void onObjectReturn(JSONObject object);
}
public void setJsonListener(JsonListener jsonListener) {
mListener = jsonListener;
}
private JsonListener mListener;
public static final String TAG = JsonAsync.class.getSimpleName();
@Override
protected JSONObject doInBackground(String... params) {
// The argument passed into tasks are arrays. So you can pass 0 or more
// arguments, when calling from activity, it's really up to you. They
// just have to be separated by commas. Like this :
// new JsonAsync.execute("thisUrl", "thatUrl", "anotherUrl");
// Although I am only grabbing the first item in the array, by calling
// params[0] below.
JSONObject object = null;
if (params != null && params.length > 0) {
object = JSONfunctions.getJSONfromURL(params[0]);
} else {
Log.e(TAG, "Task needs an argument to be able to retrieve data.");
}
// I return the item out of this method, because it is happening of the
// UI thread, so it can;t update items on the screen. You can work with
// a database from this method. That is actually recommended.
return object;
}
@Override
protected void onPostExecute(JSONObject result) {
// This method can touch UI components without throwing an error.
if (result != null && mListener != null) {
mListener.onObjectReturn(result);
}
super.onPostExecute(result);
}
}
我以前从未见过这个错误!问题是什么?
非常感谢任何帮助!谢谢
编辑:我的其他有效 Activity :
package com.spxc.ssa.streaming;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import com.actionbarsherlock.app.SherlockListActivity;
import com.actionbarsherlock.view.MenuItem;
import com.spxc.ssa.streaming.task.JsonAsync;
import com.spxc.ssa.streaming.task.JsonAsync.JsonListener;
public class ListMoviesController extends SherlockListActivity implements
OnClickListener {
private ProgressDialog mDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.dblist);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle("Movies");
JsonAsync asyncTask = new JsonAsync();
// Using an anonymous interface to listen for objects when task
// completes.
asyncTask.setJsonListener(new JsonListener() {
@Override
public void onObjectReturn(JSONObject object) {
handleJsonObject(object);
}
});
// Show progress loader while accessing network, and start async task.
mDialog = ProgressDialog.show(this, getSupportActionBar().getTitle(),
getString(R.string.loading), true);
asyncTask.execute("http://strongpixel.com/java/movies.php");
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
}
return false;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
private void handleJsonObject(JSONObject object) {
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
try {
JSONArray shows = object.getJSONArray("items");
for (int i = 0; i < shows.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = shows.getJSONObject(i);
map.put("id", String.valueOf(i));
map.put("name", "" + e.getString("name"));
//map.put("date", "Released: " + e.getString("date"));
map.put("path", "" + e.getString("path"));
mylist.add(map);
}
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
ListAdapter adapter = new SimpleAdapter(this, mylist, R.layout.dbitems,
new String[] { "name", "path" }, new int[] { R.id.item_title,
R.id.item_subtitle });
setListAdapter(adapter);
final ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
@SuppressWarnings("unchecked")
HashMap<String, String> o = (HashMap<String, String>) lv
.getItemAtPosition(position);
Intent myIntent = new Intent(ListMoviesController.this,
MoviesController.class);
myIntent.putExtra("name", o.get("name"));
myIntent.putExtra("season", o.get("season"));
myIntent.putExtra("path", o.get("path"));
startActivity(myIntent);
}
});
if (mDialog != null && mDialog.isShowing()) {
mDialog.dismiss();
}
}
}
日志:
03-12 08:35:18.722: E/log_tag(25208): Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject
03-12 09:06:52.877: V/CustomViewAbove(26397): Received ACTION_DOWN
03-12 09:06:52.920: V/CustomViewAbove(26397): onInterceptTouch moved to:(30.26232, 662.0), diff:(29.26232, 1.0), mLastMotionX:1.0
03-12 09:06:52.936: V/CustomViewAbove(26397): onInterceptTouch moved to:(73.95948, 663.08905), diff:(72.95948, 0.08905029), mLastMotionX:1.0
03-12 09:06:52.940: V/CustomViewAbove(26397): this slide allowed true dx: 72.95948
03-12 09:06:52.940: V/CustomViewAbove(26397): Starting drag! from onInterceptTouch
03-12 09:06:52.993: V/SlidingMenu(26397): changing layerType. hardware? true
03-12 09:06:53.229: V/SlidingMenu(26397): changing layerType. hardware? false
03-12 09:06:54.214: V/CustomViewAbove(26397): Received ACTION_DOWN
03-12 09:06:54.450: D/dalvikvm(26397): GC_CONCURRENT freed 73K, 7% free 4495K/4812K, paused 3ms+6ms, total 24ms
03-12 09:06:55.025: E/log_tag(26397): Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject
编辑:我尝试了相同的 JSON,但只是在一个 txt 文件 strongpixel.com/java/JSON.txt 中,这没有任何问题,加载需要一些时间,但它有效。
最佳答案
您无法让它工作,因为您的代码无法加载正确的 JSON 字符串。只有一个地方可以下载:
JSONfunctions.getJSONfromURL(params[0])
您会收到明显的错误:无法从 <!doctype html>
这样的字符串创建 JSON 对象.这意味着您下载的是 HTML 数据而不是 JSON。对于简单测试,您可以尝试下一个代码,您将得到相同的错误:
JSONObject object = new JSONObject("<!DOCTYPE html>");
您可能会由于多种原因得到此错误响应:如果您未指定 User-Agent header 或未执行授权,则错误请求、您的防火墙、代理甚至服务器都可能返回错误结果。我确实建议使用一些 Web 调试工具来帮助您处理此类情况并确保您的应用程序接收到有效数据。如果您使用的是 Windows,我建议您使用 Fiddler,它是免费的。以下是如何为测试设备设置 fiddler 的示例:http://www.cantoni.org/2011/06/28/debug-http-android-fiddler无论如何,还有其他操作系统的替代工具。
关于java - 解析 JSON 数组、DOCTYPE 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15356142/
有很多线程解释了选择什么 Doctype,但我找不到任何解释实际语法的线程。举个例子: 特别是: PUBLIC 是否可以替换为其他值,是什么意思? 为什么 url 需要用引号括起来? 是什么 ”-”
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在尝试制作 100% 高度的东西,但添加文档类型会破坏它。这在 other questions 上进行了解释. 然而,我发现了一些奇怪的事情——如果我关闭 doctype 标签(我知道你不应该这样
美好的一天, 我正在开发一个 C# Web 应用程序,一切正常,直到我添加普通的 JavaScript。 html代码如下: JScript.js是放入的 JavaS
我有一个主要的框架集页面,它使用 FRAMESET 文档类型..现在它里面有 3 个框架.. 现在对于第 2 帧,我想使用一些 HTML5 代码 ()...所以我想我必须使用 doctype 现在我的
我正在制作一个网页,我即将完成,所以我决定通过一个 html 验证器来验证它,但我的页面出现了一堆错误。我的页面目前适用于 ...但是当我输入 我页面的间距中断。 示例:工作时的图片 代码: 当我添
我刚刚在 W3C 验证器上检查了我的个人登陆页面以确保它是正确的 HTML5,然后发现我需要 而不是 通过。 但是背景图片不会延伸到底部。我已经尝试了 wrapper 的最小高度,并清除了,但似乎没有
这是文档类型所在的文件: Taekwendo tinymce.init({ selector: '#art
这是我的问题的 html 代码 Insert title here var arr = [ "A", "B", "C" ]; for (var i = 0; i 在
我在抓取一些具有多个 声明的网站时遇到了困难。 。 我正在使用带有 requests 的 Python 2.7.9 和来自 bs4 的 BeautifulSoup。当我执行 requests.get
我刚刚在 Windows Server 2008 上创建了一个新的 IIS 网站,以便使用它来部署新网站。 该网站仍然是空的。 如果我尝试在“管理工具”下打开 IIS Web 平台安装程序,则会遇到错
是否有使用 HTML 5 文档类型的专家 ,即使我没有使用任何新的 HTML 5 标签?即使我没有使用任何新的 HTML 5 标签,用 HTML 5 文档类型替换 XHTML 文档类型有什么好处吗?
假设我想将旧网站更改为“HTML5”风格。简单地更改标题是否安全 doctype如下? 原始文档类型可能是: 或 如果改为不可能破坏遗留网页的呈现方式,我认为它是安全的。 最佳答案 为什么是的,
通过在 windows 命令提示符下运行以下命令创建了一个全新的 express.js 项目 npm install express -g express newproject cd newproje
我懂了 DOCTYPE is disallowed when the feature "http://apache.org/xml/features/disallow-doctype-decl" se
这个问题在这里已经有了答案: background-color property doesn't work correctly with HTML5 DOCTYPE [duplicate] (1
我在没有使用 Doctype 的情况下构建了我的页面,但是没有它我可以获得我期望的结果。 即使用户尝试调整窗口大小时,我也尝试每行列出 4 张图像并填充页面。 问题是我最近添加了 Doctype,这里
我注意到我的一个 html 表单存在问题,文本输入字段被截断了。我将其原因缩小到我们在页面顶部使用的 指令。 当我排除 指令时,下面场景中的输入正确呈现,这意味着文本输入字段被完整绘制。但是当我按
我知道很多人在切换到 时遇到类似的问题行,然而,我已经尝试了所有的方法,甚至是经典的 html{height: 100%;} body {min-height: 100%;} 方法,以及其他方法,但
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to replace with in an html file 我在我的
我是一名优秀的程序员,十分优秀!