为什么这不是一个声明

时间:2015-08-11 10:44:47

标签: java android-studio

我将一些数据发布到网络服务这里是片段:

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();
            }
        }
    }
}

3 个答案:

答案 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,它们是语句,类声明或局部变量声明......并且局部变量声明不是语句。