gpt4 book ai didi

java - 如何处理 asynctask 中发生的 json 异常

转载 作者:行者123 更新时间:2023-11-30 11:26:34 25 4
gpt4 key购买 nike

从结果集为空的数据库中获取值时遇到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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com