[英]String not accessible in same class
I have code to show a toast: 我有显示敬酒的代码:
public void checkchallenge(View v) {
String algo = null;
if(algo == "123")
{
Context context = getApplicationContext();
CharSequence text = "You have " + messages ;
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
...
the error in eclipse that I am getting is: 我得到的日食中的错误是:
messages cannot be resolved to a variable 消息无法解析为变量
The variable "messages" is being called in some code above it: 变量“ messages”在其上方的一些代码中被调用:
String messages = c.getString(TAG_MESSAGES);
final TextView messages1 = (TextView)findViewById(R.id.envelope);
Maybe it's because I don't know Java too well but why isn't my string variable "messages" or "messages1" getting recognized in my code? 可能是因为我不太了解Java,但是为什么我的代码中没有识别出字符串变量“ messages”或“ messages1”呢? I have a feeling it has to do with permissions of the code but when I remove the "final" part off of the messages 1 TextView I get the same error. 我有一种感觉,它与代码的权限有关,但是当我从消息1 TextView中删除“最终”部分时,我得到了相同的错误。
Confused! 困惑!
Here is the entire code to the class:
public class Homepage extends Activity {
//URL to get JSON Arrays
public static String url = "http://10.0.2.2/android/SQL.php?username='";
public static String usernamefromlogin;
public static TextView errorchecking;
//JSON Node Names
private static final String TAG_USER = "users";
private static final String TAG_WINS = "wins";
private static final String TAG_MESSAGES = "messages";
private static final String TAG_NAME = "fullname";
private static final String TAG_DISPLAY = "displayname";
private static final String TAG_EMAIL = "email";
private static final String TAG_PW = "password";
private static final String TAG_CREATED = "created_at";
private static final String TAG_UPDATED = "updated_at";
JSONArray user = null;
//disable back button
@Override
public void onBackPressed() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.reshomepage);
//Get login name from EditText in login screen and concatenate it to PHP user-name for _GET command in 3 steps.
//Step 1: Get intent from previous activity
Intent intent = getIntent();
getIntent().getExtras();
//Step 2: convert intent (intent) to string called "usernamefromlogin" //error checking in log cat to see value of "usernamefromlogin"
usernamefromlogin = intent.getExtras().getString("username2"); Log.d("log of usernamefromlogin", usernamefromlogin);
//Step 3: take the string "url" and add string "usernamefromlogin" after it
String url5 = url.concat(usernamefromlogin);
String url6 = url5.concat("'");
//find TextView "errorchecking" and send the string "url6" to it so it can display in log cat
Log.d("log of URL6 in it's final state", url6);
// Creating new JSON Parser
JSONParser jParser = new JSONParser();
// Getting JSON from URL from the final string "url6"
JSONObject json = jParser.getJSONFromUrl(url6);
//Logcat check value for TAG_USER
try {
// Getting JSON Array
user = json.getJSONArray(TAG_USER);
JSONObject c = user.getJSONObject(0);
// Storing JSON item in a String Variable
String name = c.getString(TAG_NAME);
String messages = c.getString(TAG_MESSAGES);
String wins = c.getString(TAG_WINS);
String display = c.getString(TAG_DISPLAY);
String email = c.getString(TAG_EMAIL);
String pw = c.getString(TAG_PW);
String created = c.getString(TAG_CREATED);
String updated = c.getString(TAG_UPDATED);
//Importing TextView
final TextView name1 = (TextView)findViewById(R.id.tvfullname);
TextView messages1 = (TextView)findViewById(R.id.envelope);
final TextView wins1 = (TextView)findViewById(R.id.wins);
final TextView created1 = (TextView)findViewById(R.id.tvcreated_at);
final TextView updated1 = (TextView)findViewById(R.id.tvupdated_at);
//Set JSON Data in its respectable TextView
name1.setText("Hello " + name);
updated1.setText("Your last login was " + updated);
// print error if applicable.
} catch (JSONException e) {
e.printStackTrace();
}
}
public void checkchallenge(View v) {
String algo = null;
if(algo == "123")
{
// display pop up message (toast)
Context context = getApplicationContext();
CharSequence text = "You have " + messages1 ;
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}else
{
// display pop up message (toast)
Context context = getApplicationContext();
CharSequence text = "You have no new Challenges";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
}
I suspect the code is making the String
messages and TextView
local variables inside a method. 我怀疑代码在方法内部制作了String
消息和TextView
局部变量。 If you want to access these objects within the entire class they should be declared as fields. 如果要在整个类中访问这些对象,则应将它们声明为字段。
public SomeClass{
String messages;
final TextView messages1;
public void checkchallenge(View v) {
//Method implementation
}
public void someOtherMethod(){
this.messages = c.getString(TAG_MESSAGES);
this.messages1 = (TextView)findViewById(R.id.envelope);
}
}
如果您的message变量是在其他方法中定义的,则在您显示的位置将看不到它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.