字符串在同一个类中不可访问

时间:2013-12-10 01:31:31

标签: 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;

    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
...

我得到的日食中的错误是:

  

消息无法解析为变量

在它上面的一些代码中调用变量“messages”:

String messages = c.getString(TAG_MESSAGES);
final TextView messages1 = (TextView)findViewById(R.id.envelope);

也许是因为我不太了解Java,但为什么我的字符串变量“messages”或“messages1”在我的代码中无法识别?我有一种感觉它与代码的权限有关,但是当我删除消息的“最终”部分时1 TextView我得到了同样的错误。

困惑!

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();

        }
    }



}

2 个答案:

答案 0 :(得分:1)

我怀疑代码在方法中制作了String个消息和TextView局部变量。如果要在整个类中访问这些对象,则应将它们声明为字段。

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);
    }
}

答案 1 :(得分:0)

如果你的消息变量是在其他方法中定义的,那么在你显示的那一点就不会看到它。