2017-10-12 159 views
-4

我有一個名爲登錄活動的類。它登錄到用戶並將用戶帶到UserAreaActivity.class。我使用意圖從loginactivity到UserAreaActivity獲取用戶名和用戶名。android studio - 如何讓文本從一個活動到另一個?

但問題是我有另一個類名爲消息。我想從UserAreaActivity的用戶名到消息。

我試圖使用意圖,但後來當我登錄時,它直接帶我到消息。跳過UserAreaActivity.class。

如何解決?

loginactivity.class

public class LoginActivity extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    final EditText etUsername = (EditText) findViewById(R.id.etUsername); 
    final EditText etPassword = (EditText) findViewById(R.id.etPassword); 
    final TextView tvRegisterLink = (TextView) findViewById(R.id.tvRegisterhere); 
    final Button bLogin = (Button) findViewById(R.id.bLogin); 

    tvRegisterLink.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class); 
      LoginActivity.this.startActivity(registerIntent); 
     } 
    }); 

    bLogin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final String username = etUsername.getText().toString(); 
      final String password = etPassword.getText().toString(); 

      // Response received from the server 
      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) { 
          String name = jsonResponse.getString("name"); 


          Intent intent = new Intent(LoginActivity.this, UserAreaActivity.class); 
          intent.putExtra("name", name); 
          intent.putExtra("username", username); 
          LoginActivity.this.startActivity(intent); 


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

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

      LoginRequest loginRequest = new LoginRequest(username, password, responseListener); 
      RequestQueue queue = Volley.newRequestQueue(LoginActivity.this); 
      queue.add(loginRequest); 
     } 
    }); 
} 
} 

UserAreaActivity.class

public class UserAreaActivity extends AppCompatActivity { 

@Override 
protected void onCreate (Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_user_area); 


    final TextView etusername = (TextView) findViewById(R.id.textView2); 
    final TextView etwelcome = (TextView) findViewById(R.id.textView); 
    final ImageButton red = (ImageButton) findViewById(R.id.imageButton); 
    final ImageButton messages = (ImageButton) findViewById(R.id.imageButton2); 
    final ImageButton blue = (ImageButton) findViewById(R.id.imageButton3); 
    final ImageButton ping = (ImageButton) findViewById(R.id.imageButton4); 




    red.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent registerIntent = new Intent(UserAreaActivity.this, Report.class); 
      UserAreaActivity.this.startActivity(registerIntent); 

     } 
    }); 

    messages.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent registerIntent = new Intent(UserAreaActivity.this, Messages.class); 
      UserAreaActivity.this.startActivity(registerIntent); 


     } 
    }); 

    Intent intent = getIntent(); 
    String name = intent.getStringExtra("name"); 
    String username = intent.getStringExtra("username"); 


    String message = "Welcome " + name; 
    etwelcome.setText(message); 
    etusername.setText(username); 

} 

messages.class

public class Messages extends AppCompatActivity { 

private Button add_room; 
private EditText room_name; 

private ListView listView; 
private ArrayAdapter<String> arrayAdapter; 
private ArrayList<String> list_of_rooms = new ArrayList<>(); 
private String name; 
private DatabaseReference root = FirebaseDatabase.getInstance().getReference().getRoot(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_messages); 

    add_room = (Button) findViewById(R.id.btn_add_room); 
    room_name = (EditText) findViewById(R.id.room_name_edittext); 
    listView = (ListView) findViewById(R.id.listView); 


    arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list_of_rooms); 

    listView.setAdapter(arrayAdapter); 




    add_room.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      Map<String,Object> map = new HashMap<String, Object>(); 
      map.put(room_name.getText().toString(),""); 
      root.updateChildren(map); 

     } 
    }); 

    root.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      Set<String> set = new HashSet<String>(); 
      Iterator i = dataSnapshot.getChildren().iterator(); 

      while (i.hasNext()){ 
       set.add(((DataSnapshot)i.next()).getKey()); 

      } 

      list_of_rooms.clear(); 
      list_of_rooms.addAll(set); 

      arrayAdapter.notifyDataSetChanged(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 



      Intent intent = new Intent(getApplicationContext(),Chat_Room.class); 
      intent.putExtra("room_name",((TextView)view).getText().toString()); 
      intent.putExtra("user_name", "HERE"); 
      startActivity(intent); 


     } 
    }); 


} 


} 
+0

使用共享偏好 –

+0

retrive數據哦。這與意圖類似嗎? – user3431791

+0

您可以使用處理程序對象來延遲呼叫,以便UserAreaActivity在您指定的時間內可見。 –

回答

1

要解決它,你已經通過使用下面的代碼來實現SharedPreferences

SharedPreferences preferences; 
SharedPreferences.Editor editor; 

private String TAG_USERNAME = "username"; 

對於SharedPreferences設置的用戶名:

public void setUsername(String username) { 
    editor.putString(TAG_USERNAME,username); 
    editor.commit(); 
} 

public String getUsername() { 
    return preferences.getString(TAG_USERNAME,"null"); 
} 

希望它能幫助。

+1

上使用它我同意他應該使用共享首選項。但是,您不應該在共享首選項中輸入純文本密碼。 – Jon

+0

爲什麼我需要將密碼置於sharedpreference中?我只想要用戶名 – user3431791

+0

@ user3431791它只是一個參數。你可以根據你的使用情況設置任何值。 –

0

可以使用SharedPreferences

的SharedPreferences類提供了一個總體框架,使您可以保存和檢索的原始數據類型的持久鍵 - 值對。您可以使用SharedPreferences來保存任何原始數據:布爾值,浮點數,整數,長整數和字符串。這些數據將在用戶會話中持續存在(即使您的應用程序被終止)。

示例代碼將數據存儲在SharedPreferences

SharedPreferences preferences = getSharedPreferences("myPref", MODE_PRIVATE); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putString("USER_NAME","NILESH"); 
editor.apply(); 

樣本代碼從SharedPreferences

SharedPreferences preferences = getSharedPreferences("myPref", MODE_PRIVATE); 
String userName = preferences.getString("USER_NAME", ""); 
相關問題