2014-10-30 2 views
0

Я новичок в многопользовательском программировании. Как установить String в значение hashmap? Я хочу вызвать свойства hashmap из RoomListActivity и установить его значение для активности QuizMaintain, а также я хочу установить значение hashmap из класса QuizMaintain в textview. Вот мой пример кодаAppwarp Android Programming get Property from Room List Activity

RoomListActivity

public void onJoinNewRoomClicked(View view){ 
    progressDialog = ProgressDialog.show(this,"","Please wait..."); 
    progressDialog.setCancelable(true); 

    HashMap<String, Object> properties = new HashMap<String, Object>(); 
    properties.put("timer", ""); 
    properties.put("question", ""); 
    properties.put("answer", ""); 
    properties.put("foulanswer", ""); 


    theClient.createRoom(""+System.currentTimeMillis(), "Yoshua", 2, properties); 
} 

Тогда я хочу, чтобы установить это значение от деятельности QuizMaintain

public class QuizMaintain extends Activity implements RoomRequestListener, NotifyListener { 

private WarpClient theClient; 
private HashMap<String, Object> properties; 
private TextView txttimer,txtquestion; 
private String roomId = ""; 
private HashMap<String, User> userMap = new HashMap<String, User>(); 
String string="5x5#5x4#150:3#500:20#536+59"; 
String[] questions = string.split("#"); 
String question1 = questions[0]; 
String question2 = questions[1]; 
String question3 = questions[2]; 
String question4 = questions[3]; 
String question5 = questions[4]; 


@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_quiz_maintain); 
     txttimer = (TextView)findViewById(R.id.timer); 
     txtquestion = (TextView)findViewById(R.id.questionview); 


     try{ 
      theClient = WarpClient.getInstance(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

     theClient.getLiveRoomInfo("143680827"); 
     Intent intent = getIntent(); 
     roomId = intent.getStringExtra("roomId"); 
     init(roomId); 

     //setquestionview(); 






} 



private void init(String roomId){ 
    if(theClient!=null){ 
     theClient.addRoomRequestListener(this); 
     theClient.addNotificationListener(this); 
     theClient.joinRoom(roomId); 
    } 
} 



@Override 
public void onGetLiveRoomInfoDone(LiveRoomInfoEvent event) { 
    properties = event.getProperties(); 
    properties.put("question", question1); 

} 

Я хочу, чтобы установить значение HashMap где ключ является «вопросом». И значение, которое я хочу установить, связано с разделенной строкой. Когда я спрошу их службу поддержки, хочу ли я получить свойства комнаты, я должен вызвать метод getLiveRoomInfo и передать идентификатор roomID в качестве аргумента. Немного смущает здесь. Благодарю.

Но, похоже, моя проблема еще не решена. После вызова метода updateRoomProperties, но я получил еще одну ошибку здесь. Говорят, что WarpClient.AddZoneRequestListener (this) возвращает исключение нулевого указателя

ответ

0

Когда вы создаете комнату, вы передаете хэш-карту. Этот хэш-файл хранится как документ JSON внутри комнаты на сервере. AppWarp называет его «Свойства комнаты».

Теперь для извлечения этих свойств вам необходимо вызвать метод getLiveRoomInfo. Это представит вам свойства комнаты. Здесь вы снова добавляете/изменяете значение ключа. Но вы не сказали серверу, что обновляете эти свойства комнаты. Поэтому ваши изменения остаются локальными и слишком ограничены сферой действия.

Итак, когда вы вызываете метод getLiveRoomInfo, вы не увидите изменений, так как вы не обновили их на сервере. Для обновления на сервере вам необходимо вызвать метод updateRoomProperties. В этом методе вы можете добавить или изменить свой хэш.