我将一些数据发布到网络服务这里是片段:
try {
response = UniversalHttpUrlConnection.postJSONObject(ctx.getResources().getString(R.string.delete_one), UniversalHashMapToJSONObjectParams.createObjectForParams(deleteMap));
System.out.println("Response from del task" + response);
if(response != null)
JSONObject jObj = new JSONObject(response);
System.out.println("Deletion" + DatabaseHandler.getInstance(ctx).removeReceipt(receipt));
} catch (JSONException report) {
report.printStackTrace();
}
我的IDE抱怨:
if(response != null)
JSONObject jObj = new JSONObject(response);
确切的陈述是: 不是声明 - 为什么会发生这种情况,我在这里遗漏了什么?
如果我使用:
if (response != null) {
JSONObject jObj = new JSONObject(response);
}
IDE不会抱怨。
详情请参阅我的完整方法:
public static void deleteReceipt(Receipt receipt, Context ctx) {
SessionManager sessionManager;
sessionManager = new SessionManager(ctx);
HashMap<String, String> map = sessionManager.getUserDetails();
String email = map.get("email");
if (CheckConnection.isNetworkConnected(ctx)) {
System.out.println("local id " + receipt._id);
Receipt rec = DatabaseHandler.getInstance(ctx).getReceipt(receipt._id);
String webReceiptId = rec.web_receipt_id;
System.out.println("WebReceipt ID = " + webReceiptId);
if (webReceiptId.equalsIgnoreCase("dummy")) {
// Delete from local
System.out.println("Deletion" + DatabaseHandler.getInstance(ctx).removeReceipt(receipt));
} else {
// delete from server
// delete from local
HashMap<String, String> deleteMap = new HashMap<>();
deleteMap.put("email", email);
deleteMap.put("type", "Android");
deleteMap.put("key", Utility.getencryptkey());
deleteMap.put("task_id", webReceiptId);
deleteMap.put("receipt_id", String.valueOf(receipt._id));
String response = null;
try {
response = UniversalHttpUrlConnection.postJSONObject(ctx.getResources().getString(R.string.delete_one),
UniversalHashMapToJSONObjectParams.createObjectForParams(deleteMap));
System.out.println("Response from del task" + response);
if (response != null) {
JSONObject jObj = new JSONObject(response);
}
System.out.println("Deletion" + DatabaseHandler.getInstance(ctx).removeReceipt(receipt));
} catch (JSONException report) {
report.printStackTrace();
}
}
}
}
答案 0 :(得分:12)
JSONObject jObj = ...
等变量声明必须在块内。
因此:
if(response != null) {
JSONObject jObj = new JSONObject(response);
}
或
JSONObject jObj = ...
if(response != null)
jObj = new JSONObject(response);
有效。
答案 1 :(得分:12)
你所获得的是一个本地变量声明 - 并且它本身不允许作为声明......因为它毫无意义。为什么声明一个你无法使用的变量,因为它会立即超出范围?编译器试图阻止你犯错误,基本上。
在JLS术语中,有一个Statement和一个Block - 一个Block包含BlockStatements,它们是语句,类声明或局部变量声明......并且局部变量声明不是&#39 ; t语句。
答案 2 :(得分:0)
在JLS术语中,有一个Statement和一个Block - 一个Block包含BlockStatements,它们是语句,类声明或局部变量声明......并且局部变量声明不是语句。