我遇到变量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);
}
});
}
}
答案 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);
}
});
}
}