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你说得对:)我在谈论(写作?)停止和寻求帮助的策略。干杯