Java 字符串在同一类中不可访问
我有代码来祝酒:Java 字符串在同一类中不可访问,java,android,eclipse,variables,permissions,Java,Android,Eclipse,Variables,Permissions,我有代码来祝酒: public void checkchallenge(View v) { String algo = null; if(algo == "123") { Context context = getApplicationContext(); CharSequence text = "You have " + messages ; int duration = Toast.LENGTH_SHORT; Toa
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();
...
我在eclipse中遇到的错误是:
无法将消息解析为变量
变量“messages”在其上方的某些代码中被调用:
String messages = c.getString(TAG_MESSAGES);
final TextView messages1 = (TextView)findViewById(R.id.envelope);
可能是因为我对Java不太了解,但为什么我的字符串变量“messages”或“messages1”在我的代码中没有被识别?我有一种感觉,这与代码的权限有关,但当我从messages 1 TextView中删除“final”部分时,我会收到相同的错误
糊涂了
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();
}
}
}
如果您的messages变量是在其他方法中定义的,那么在您显示的点上将看不到它。我怀疑代码正在方法中生成
字符串
消息和文本视图
局部变量。如果要在整个类中访问这些对象,则应将它们声明为字段
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);
}
}
变量“messages”在它上面的一些代码中被调用:有一个变量范围。您只能使用当前范围内可见的变量。对不起,我不太理解您的评论。如果这个变量用过一次,我就不能再用了?我习惯于用PHP编程,在PHP中变量可以无限期地在同一个脚本上使用,所以这对我来说非常混乱<代码>。在它上面的一些代码中调用不是很清楚。请显示您正在执行此操作的代码的结构。我们也许可以提供更好的帮助。我刚刚用全部代码更新了我的问题,用全部代码更新了我的问题。你认为这是因为我在try/catch语句中包含了字符串吗?当然,所有变量都在try/catch中,在try/catch之外它们不存在。谢谢你的帮助。我想我的新问题是,如何在不破坏代码的情况下删除try-and-catch?我尝试删除它们,然后一切都乱了套,我一直在为所有字符串获取“未处理的异常类型JSONException”now@user我认为这种学习java的策略行不通。不要每次遇到问题就停下来要求解决。浏览一些教程并使用谷歌。试着理解错误,Java的文档非常丰富。@SotiriosDelimanolis你说得对:)我在谈论(写作?)停止和寻求帮助的策略。干杯