我如何绕过最终变量?

时间:2016-08-02 11:36:31

标签: android

我遇到变量group_id时遇到问题。当我有这样的代码时,它表示group_id需要被声明为final。它不可能是最终的,因为我需要将try{...}中的值更改为响应字符串中的值,然后在UserGroupRequest中使用它。

如果我按下Android studio中的自动修复程序将group_id更改为最终的int数组,则try catch中的变量值是正确的。然而它并没有保持正确,因为它返回0,因为group_id是最终的。我对此的意思是程序从数据库中检索id没有任何问题。

有什么建议我如何绕过变量最终?

由于

以下是代码:

final EditText etGroupName = (EditText) findViewById(R.id.etGroupName);
    final Button bRegisterGroup = (Button) findViewById(R.id.bRegisterGroup);
    Intent intent = getIntent();
    final int user_id = intent.getIntExtra("user_id", 0);
    final String firstname = intent.getStringExtra("firstname");
    final String lastname = intent.getStringExtra("lastname");
    final String mail = intent.getStringExtra("mail");
    int group_id = 0;




    bRegisterGroup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String groupname = etGroupName.getText().toString();


            Response.Listener<String> responseListener = new Response.Listener<String>(){

                @Override
                public void onResponse(String response) {

                    try {
                        JSONObject jsonResponse = new JSONObject(response);
                        boolean success = jsonResponse.getBoolean("success");
                        group_id = jsonResponse.getInt("group_id");



                        if(success){
                            Intent intent = new Intent(RegisterGroupActivity.this, UserAreaActivity.class);
                            intent.putExtra("firstname", firstname);
                            intent.putExtra("lastname", lastname);
                            intent.putExtra("mail", mail);
                            RegisterGroupActivity.this.startActivity(intent);
                        }
                        else{
                            AlertDialog.Builder builder1 = new AlertDialog.Builder(RegisterGroupActivity.this);
                            builder1.setMessage("Register Failed").setNegativeButton("Retry", null).create().show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                        etGroupName.setText("fel");
                    }
                }
            };


            RegisterGroupRequest registerGroupRequest = new RegisterGroupRequest(groupname,responseListener);
            RequestQueue queue = Volley.newRequestQueue(RegisterGroupActivity.this);
            queue.add(registerGroupRequest);
           UserGroupRequest groupRequest = new UserGroupRequest(user_id, group_id, "admin", responseListener);
            queue.add(groupRequest);
        }
    });
}
}

5 个答案:

答案 0 :(得分:1)

声明为global variable,然后在课堂上使用anywhere。你不必把它做到最后。

public class MainActivity extends Activity {

    int group_id = 0; //Global Vaiable have access to whole class

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
    // now use it anywhere in class
}

答案 1 :(得分:1)

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageButton;



/**
 * Created by Mani on 02/08/16.
 */
public class MenuActivity extends AppCompatActivity {

    ImageButton ib2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.asdf);
        ib2= (ImageButton) findViewById(R.id.imageButton2);
        ib2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent1=new Intent(MenuActivity.this,YourActivity.class);
                startActivity(intent1);
            }
        });
    }
}

将其设为公共全局变量

答案 2 :(得分:0)

请将group_id声明为globalvariable。然后就可以改变它的值。

public class ClassName extends Activity{

    private int group_id ;
........
}

答案 3 :(得分:0)

由于尝试捕获而发生这种情况。 在您的成功方法中创建另一个变量并将其用作组ID,并将此值分配给您的group_id值,您还可以在任何位置更改group_id, 请看以下,

public class C {
private int x;
public C() {
int x_val;
try {
  x_val = Integer.parseInt("someinput");
}
catch(NumberFormatException e) {
  x_val = 42;
}
this.x = x_val;
 }
 }

答案 4 :(得分:0)

我希望这可以解决您的问题: 你可以这样做

public class aclass {
  private final int myvar;
  public aclass() {
    int tmp_val;
    try {
      tmp_val = Integer.parseInt("12");
    }
    catch(Exception e) {
      tmp_val = 42;
    }
    this.myvar = x_val;
  }
}

以下是您的代码,如上例所示:

    final EditText etGroupName = (EditText) findViewById(R.id.etGroupName);
    final Button bRegisterGroup = (Button) findViewById(R.id.bRegisterGroup);
    Intent intent = getIntent();
    final int user_id = intent.getIntExtra("user_id", 0);
    final String firstname = intent.getStringExtra("firstname");
    final String lastname = intent.getStringExtra("lastname");
    final String mail = intent.getStringExtra("mail");

    private final int group_id = 0; // declare your group_id as private final

    bRegisterGroup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String groupname = etGroupName.getText().toString();


            Response.Listener<String> responseListener = new Response.Listener<String>(){

                @Override
                public void onResponse(String response) {

                   //TEMPORARY VARIABLE
                    int tmp_group_id;

                    try {
                        JSONObject jsonResponse = new JSONObject(response);
                        boolean success = jsonResponse.getBoolean("success");
                        tmp_group_id = jsonResponse.getInt("group_id");


                        if(success){
                            Intent intent = new Intent(RegisterGroupActivity.this, UserAreaActivity.class);
                            intent.putExtra("firstname", firstname);
                            intent.putExtra("lastname", lastname);
                            intent.putExtra("mail", mail);
                            RegisterGroupActivity.this.startActivity(intent);
                        }
                        else{
                            AlertDialog.Builder builder1 = new AlertDialog.Builder(RegisterGroupActivity.this);
                            builder1.setMessage("Register Failed").setNegativeButton("Retry", null).create().show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                        etGroupName.setText("fel");
                    }
                    this.group_id = tmp_group_id; // assign to actual variable
                }
            };


            RegisterGroupRequest registerGroupRequest = new RegisterGroupRequest(groupname,responseListener);
            RequestQueue queue = Volley.newRequestQueue(RegisterGroupActivity.this);
            queue.add(registerGroupRequest);

           //also modify here make this.group_id
           UserGroupRequest groupRequest = new UserGroupRequest(user_id, this.group_id, "admin", responseListener);

            queue.add(groupRequest);
        }
    });
}

}
相关问题