- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从结果集为空的数据库中获取值时遇到json异常
下面是我的代码一切都很好,唯一的问题是当从数据库中获取的值是空的时候我遇到了 json 异常。我将如何处理这个帮助我,请帮助我,我正在使用 asytask 帮助我,请问我该怎么办?怎么处理???
public class fifthscreen extends Activity {
String num = null;
String _response;
// TextView ingredient;
private RatingBar ratingBar;
// TextView ingredient;
long Menu_ID;
String dish_ID;
View row4;
int IOConnect = 0;
View row3;
final private static int DIALOG_LOGIN = 1;
String status;
private static Handler handler;
ExpandableHeightGridView listview;
CategoryListAdapter3 cla;
String DescriptionAPI;
public Dialog dialog2;
public static int feedbacktype;
public static int myInt;
TextView txt1, txt2, txt3;
TextView ingredient;
ImageView img1;
String SelectMenuAPI;
DataBase db;
String FeedbackAPI;
String FeedbackAPI2;
static ArrayList<Long> Category_ID = new ArrayList<Long>();
static ArrayList<String> Category_name = new ArrayList<String>();
static ArrayList<String> Category_image = new ArrayList<String>();
ArrayList<Ingredient> ingredientList = new ArrayList<Ingredient>();
public static String allergen2;
private AQuery androidAQuery;
String name;
public static String FeedbackDishId;
String description;
String mainimage;
String allergen;
String url1;
View viewLoad;
String nutrition;
String ingredientName;
String ingredientSub;
String formattedAsString;
Button FeedbackYummiSlice, FeedbackThisdish, nothanks;
final Context context = this;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fifthscreen);
img1 = (ImageView) findViewById(R.id.test_button_image);
txt1 = (TextView) findViewById(R.id.menuname);
txt3 = (TextView) findViewById(R.id.description);
ImageView b = (ImageView) findViewById(R.id.button1);
ingredient = (TextView) findViewById(R.id.ingredient);
Intent iGet = getIntent();
ImageView options = (ImageView) findViewById(R.id.options5);
androidAQuery = new AQuery(this);
db = new DataBase(getBaseContext());
try {
db.createDataBase();
} catch (IOException e1) {
e1.printStackTrace();
}
options.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent iMenuList = new Intent(fifthscreen.this,
LinkButtons.class);
startActivity(iMenuList);
}
});
dish_ID = iGet.getStringExtra("dish_ID");
listview = (ExpandableHeightGridView) findViewById(R.id.listview2);
listview.setExpanded(true);
cla = new CategoryListAdapter3(fifthscreen.this);
new TheTask().execute();
ImageView btnback = (ImageView) findViewById(R.id.btnback);
btnback.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog2 = new Dialog(context);
View vLoad = LayoutInflater.from(fifthscreen.this).inflate(
R.layout.timer, null);
dialog2.setContentView(vLoad);
FeedbackYummiSlice = (Button) dialog2
.findViewById(R.id.FeedbackYummiSlice);
FeedbackThisdish = (Button) dialog2
.findViewById(R.id.FeedbackThisdish);
nothanks = (Button) dialog2.findViewById(R.id.nothanks);
dialog2.setTitle("FeedBack");
TextView text = (TextView) dialog2.findViewById(R.id.text);
text.setText(" I");
dialog2.setCancelable(false);
FeedbackYummiSlice.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
showDialog(DIALOG_LOGIN);
feedbacktype = 1;
FeedbackDishId = "0";
}
});
FeedbackThisdish.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//
showDialog(DIALOG_LOGIN);
feedbacktype = 2;
FeedbackDishId = dish_ID;
}
});
nothanks.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//
dialog2.dismiss();
}
});
dialog2.show();
}
});
}
public class TheTask extends AsyncTask<Void, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... arg0) {
return _response;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
displayData();
txt1.setText(name);
txt3.setText(description);
androidAQuery.id(img1).image(mainimage, true, true);
listview.setAdapter(cla);
cla.notifyDataSetChanged() ;
}
}
@Override
protected Dialog onCreateDialog(int id) {
AlertDialog dialogDetails = null;
switch (id) {
case DIALOG_LOGIN:
LayoutInflater inflater = LayoutInflater.from(this);
View dialogview = inflater.inflate(R.layout.dialog_layout, null);
AlertDialog.Builder dialogbuilder = new AlertDialog.Builder(this);
dialogbuilder.setTitle("Feedback Form");
dialogbuilder.setView(dialogview);
dialogDetails = dialogbuilder.create();
break;
}
return dialogDetails;
}
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
switch (id) {
case DIALOG_LOGIN:
final AlertDialog alertDialog = (AlertDialog) dialog;
Button Submit = (Button) alertDialog.findViewById(R.id.Submitbtn);
Button cancelbutton = (Button) alertDialog
.findViewById(R.id.btn_cancel);
final EditText Email = (EditText) alertDialog
.findViewById(R.id.Email);
final EditText Comments = (EditText) alertDialog
.findViewById(R.id.Comments);
ratingBar = (RatingBar) alertDialog.findViewById(R.id.ratingBar);
}
}
private void displayData() {
name ="";
description ="";
nutrition ="";
allergen ="";
mainimage ="";
ingredientName ="";
ingredientSub ="";
formattedAsString="";
Cursor mCursor = db
.selectQuery("SELECT * ");
if (mCursor.moveToFirst()) {
do {
name = (mCursor.getString(mCursor.getColumnIndex("name")));
description
=(mCursor.getString(mCursor.getColumnIndex("description")));
nutrition=(mCursor.getString(mCursor.getColumnIndex("nutrition")));
allergen=(mCursor.getString(mCursor.getColumnIndex("allergen")));
mainimage=(mCursor.getString(mCursor.getColumnIndex("image")));
} while (mCursor.moveToNext());
}
mCursor.close();
Cursor mCursor2 = db.selectQuery("SELECT ");
if (mCursor2.moveToFirst()) {
do {
ingredientName = mCursor2.getString(mCursor2.getColumnIndex("name"));
ingredientSub = mCursor2.getString(mCursor2.getColumnIndex("sub_ingredients"));
// create an Ingredient object in your loop and fill its
// values
Ingredient ingredientItem = new Ingredient();
ingredientItem.setName(ingredientName);
ingredientItem.setSub(ingredientSub);
// Add your ingredient to your ingredientList
ingredientList.add(ingredientItem);
} while (mCursor2.moveToNext());
}
// Now you got a list of ingredients.
formattedAsString = getFormattedIngredientList(ingredientList);
ingredient.setText(Html.fromHtml(formattedAsString));
mCursor2.close();
Category_ID.clear();
Category_name.clear();
Category_image.clear();
try {
JSONArray jArray = new JSONArray(allergen);
//
for (int i = 0; i < jArray.length(); i++) {
JSONObject object = jArray.getJSONObject(i);
Category_ID.add((long) i);
Category_name.add(object.getString("name"));
Category_image.add(object.getString("image"));
}
JSONObject json = new JSONObject(nutrition);
final TableLayout table = (TableLayout) findViewById(R.id.table2);
for (int j = 0; j < json.length(); j++) {
String s = String.valueOf(j + 1);
row3 = getLayoutInflater().inflate(R.layout.rows, null);
((TextView) row3.findViewById(R.id.localTime)).
setText(json.getJSONObject(s).getString("qty"));
((TextView) row3.findViewById(R.id.apprentTemp)).
setText(json.getJSONObject(s).getString("name"));
table.addView(row3);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private String getFormattedIngredientList(ArrayList<Ingredient> ingredientList) {
String concatProduct = "";
for (int i = 0; i < ingredientList.size(); i++) {
Ingredient currentIngredient = ingredientList.get(i);
if(currentIngredient.getSub() == null) {
currentIngredient.setSub("");
}
if (i == 0) {
if ((currentIngredient.getSub() == null ||
currentIngredient.getSub().equals(""))) {
concatProduct = " " + "<b>" + currentIngredient.getName() + "</b>" + ", " +
currentIngredient.getSub();
} else {
concatProduct = " " + "<b>" + currentIngredient.getName() + "</b>" + ": " +
currentIngredient.getSub();
}
} else {
if ((currentIngredient.getSub() == null ||
currentIngredient.getSub().equals(""))) {
if (i == ingredientList.size() - 1) {
concatProduct += " " + "<b>" + currentIngredient.getName() + "</b>" +
". " + currentIngredient.getSub();
} else {
concatProduct += " " + "<b>" + currentIngredient.getName() + "</b>" +
", " + currentIngredient.getSub();
}
} else {
concatProduct += " " + "<b>" + currentIngredient.getName() + "</b>" + ": " + currentIngredient.getSub();
}
}
}
return concatProduct;
}
}
**Following is exception:**
FATAL EXCEPTION: main
java.lang.NullPointerException
at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:112)
at org.json.JSONTokener.nextValue(JSONTokener.java:90)
at org.json.JSONArray.<init>(JSONArray.java:87)
at org.json.JSONArray.<init>(JSONArray.java:103)
at com.schoollunchapp.fifthscreen.displayData(fifthscreen.java:444)
at com.schoollunchapp.fifthscreen.access$0(fifthscreen.java:377)
at com.schoollunchapp.fifthscreen$TheTask.onPostExecute(fifthscreen.java:253)
at com.schoollunchapp.fifthscreen$TheTask.onPostExecute(fifthscreen.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:417)
at android.os.AsyncTask.access$300(AsyncTask.java:127)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
最佳答案
我认为这是由于 nullpointerexception.. 你需要显式处理空值
if(mCursor!=null){
if (mCursor.moveToFirst()) {
do {
name = (mCursor.getString(mCursor.getColumnIndex("name")));
description =(mCursor.getString(mCursor.getColumnIndex("description")));
nutrition=(mCursor.getString(mCursor.getColumnIndex("nutrition")));
allergen=(mCursor.getString(mCursor.getColumnIndex("allergen")));
mainimage=(mCursor.getString(mCursor.getColumnIndex("image")));
} while (mCursor.moveToNext());
}
}
稍后还要检查
if(allergen!=null){
JSONArray jArray = new JSONArray(allergen);
......
}
关于java - 如何处理 asynctask 中发生的 json 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19768607/
最近开始学习MongoDB。今天老师教了我们 mongoexport 命令。在练习时,我遇到了一个典型的问题,包括教练在内的其他同学都没有遇到过。我在我的 Windows 10 机器上使用 Mongo
我是 JSON Schema 的新手,读过什么是 JSON Schema 等等。但我不知道如何将 JSON Schema 链接到 JSON 以针对该 JSON Schema 进行验证。谁能解释一下?
在 xml 中,我可以在另一个 xml 文件中包含一个文件并使用它。如果您的软件从 xml 获取配置文件但没有任何方法来分离配置,如 apache/ngnix(nginx.conf - site-av
我有一个 JSON 对象,其中包含一个本身是 JSON 对象的字符串。我如何反序列化它? 我希望能够做类似的事情: #[derive(Deserialize)] struct B { c: S
考虑以下 JSON { "a": "{\"b\": 12, \"c\": \"test\"}" } 我想定义一个泛型读取 Reads[Outer[T]]对于这种序列化的 Json import
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 11 个月前关闭。 Improve
我的旧项目在 MySQL 中有 Standard JSON 格式的数据。 对于我在 JS (Node.js) 和 DynamoDB 中的全新项目,关于 Standard JSON格式: 是否建议将其转
JSON 值字符串、数字、true、false、null 是否是有效的 JSON? 即,是 true 一个有效的 JSON 文档?还是必须是数组/对象? 一些验证器接受这个(例如 http://jso
我有一个 JSON 字符串,其中一个字段是文本字段。这个文本字段可以包含用户在 UI 中输入的文本,如果他们输入的文本是 JSON 文本,也许是为了说明一些编码,我需要对他们的文本进行编码,以便它不会
我正在通过 IBM MQ 调用处理数据,当由 ColdFusion 10 (10,0,11,285437) 序列化时,0 将作为 +0.0 返回,它会导致无效的 JSON并且无法反序列化。 stPol
我正在从三个数组中生成一个散列,然后尝试构建一个 json。我通过 json object has array 成功了。 require 'json' A = [['A1', 'A2', 'A3'],
我从 API 接收 JSON,响应可以是 30 种类型之一。每种类型都有一组唯一的字段,但所有响应都有一个字段 type 说明它是哪种类型。 我的方法是使用serde .我为每种响应类型创建一个结构并
我正在下载一个 JSON 文件,我已将其检查为带有“https://jsonlint.com”的有效 JSON 到文档目录。然后我打开文件并再次检查,结果显示为无效的 JSON。这怎么可能????这是
我正在尝试根据从 API 接收到的数据动态创建一个 JSON 对象。 收到的示例数据:将数据解码到下面给出的 CiItems 结构中 { "class_name": "test", "
我想从字符串转换为对象。 来自 {"key1": "{\n \"key2\": \"value2\",\n \"key3\": {\n \"key4\": \"value4\"\n }\n
目前我正在使用以下代码将嵌套的 json 转换为扁平化的 json: import ( "fmt" "github.com/nytlabs/gojsonexplode" ) func
我有一个使用来自第三方 API 的数据的应用程序。我需要将 json 解码为一个结构,这需要该结构具有“传入”json 字段的 json 标签。传出的 json 字段具有不同的命名约定,因此我需要不同
我想使用 JSON 架构来验证某些值。我有两个对象,称它们为 trackedItems 和 trackedItemGroups。 trackedItemGroups 是组名称和 trackedItem
考虑以下案例类模式, case class Y (a: String, b: String) case class X (dummy: String, b: Y) 字段b是可选的,我的一些数据集没有字
我正在存储 cat ~/path/to/file/blah | 的输出jq tojson 在一个变量中,稍后在带有 JSON 内容的 curl POST 中使用。它运作良好,但它删除了所有换行符。我知
我是一名优秀的程序员,十分优秀!