2017-03-13 5 views
-2

私は、ユーザーがリモートデータベースに格納されている登録済みの情報を更新できるアプリケーションを利用しています。更新ボタンを押すと、データベース内の情報は更新されていますが、静的変数は変更されません。私のコードは事前に助けてくれてありがとう!別のクラスから静的変数を更新する

btUpdate.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final String first_name = First_name.getText().toString(); 
      final String last_name = Last_name.getText().toString(); 
      final String email = Email.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"); 

         if (success) { 
          LoginActivity.first_name = jsonResponse.getString("first_name"); 
          LoginActivity.last_name = jsonResponse.getString("last_name"); 
          LoginActivity.email_address = jsonResponse.getString("email"); 

         } else { 
          AlertDialog.Builder builder = new AlertDialog.Builder(UpdateInfoActivity.this); 
          builder.setMessage("Submission Failed") 
            .setNegativeButton("Retry", null) 
            .create() 
            .show(); 
         } 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 


       } 

      }; 

      UpdateInfoRequest updateInfoRequest = new UpdateInfoRequest(first_name, last_name, email, userID, responseListener); 
      RequestQueue queue = Volley.newRequestQueue(UpdateInfoActivity.this); 
      queue.add(updateInfoRequest); 

      Intent intent = new Intent(UpdateInfoActivity.this, MainActivity.class); 
      UpdateInfoActivity.this.startActivity(intent); 

     } 
    }); 
+0

私は静的変数を見ることができません。 – Izruo

+0

@Izruo LoginActivity。first_name ...など –

+0

あなたの 'LoginActivity'クラスを表示 –

答えて

0
あなたはグローバルなユーザーがプロファイルしたい場合は、この

class User { 

     private static User user = null; 

     public String firstName = ""; 

     private User() {} 

     public static synchronized User getInstance() { 

      if (user == null) user = new User(); 

      return user; 
     } 
    } 

を行うことができ、この

if (success) { 
    LoginActivity.first_name = first_name; 
    LoginActivity.last_name = last_name; 
    LoginActivity.email_address = email; 
} 

と私はそのような静的変数を使用されないようにコードを変更し

プロジェクト内のどこからでもデータを取得するには

String name = User.getInstance().firstName;

とデータ行うこの

User.getInstance().firstName = UserName;

+0

これはうまくいった芽です! – NiamLeeson

+1

@NiamLeesonこれはJSONレスポンスを完全に無視することに注意してください –

+1

@ cricket_007質問を正しく読んでください –

0

ファーストを変更するには、静的変数は、クラスのすべてのオブジェクトとメソッドによって共有されていることを理解します。

したがって、静的変数のインスタンスは1つのみです。

他のクラスから静的変数を更新する方法 -

1.Throughオブジェクト。
2.Throughクラス名。

コードサンプルを囲みます。

class A{ 
     static int val; 
     public A(){val=0; } 
     //.... 
    } 
    class B{ 
     A obj= new A(); 
     public void updateStatic(){ 
       obj.val=10; // updates values through object to 10 
       A.val=100; //updates values through class name to 100 
} 
//.. 
} 

は、それが

0

に役立ちますが、静的変数が変更されていません願っています。

は...あなたは文字列ではなく、自分の中の任意のTextViewかのEditTextを更新)

if (success) { 
    LoginActivity.first_name = jsonResponse.getString("first_name"); 
    LoginActivity.last_name = jsonResponse.getString("last_name"); 
    LoginActivity.email_address = jsonResponse.getString("email"); 
} 

ちょうど...

1に言及することを行うためのコードを言われるべきあなたがsetTextに電話しない限り、あなたのアプリで「視覚的な変化」が見られることが予想される場合は、何も起こりません。

2)そのコードはtry-catchでラップされているため、エラーが発生する可能性があるので、ログでJSONExceptionを確認してください。これらのキーがサーバーから返送されない場合は、更新されません。たとえば、JSONは{"success": true }

です。SharedPrefencesは、ここではstaticよりも大幅に優先する必要があります。

0

静的変数を使用してアクティビティ間でデータを転送することは、私の意見では良い方法ではありません。それは悪い習慣です。インテントを使用してデータを転送したり、ストレージメディアにデータを保存したりそこからアクセスしたりする方が優れたソリューションになります。

関連する問題