Я написал программу для публикации некоторых данных json и получения тех же json-данных, чтобы я мог показывать данные в ListView
в том же самом действии. Проводка данных и получение данных осуществляется с помощью библиотеки волейбола.ListView не получает обновления, где я должен позвонить notifyDataSetChanged() и где я должен установить адаптер?
Итак, моя проблема заключается в том, что я ввожу что-то внутри своего EditText
и нажимаю на кнопку, чтобы опубликовать некоторые данные, данные отправляются, но я не могу мгновенно ее увидеть внутри своего ListView
, вкратце данные не обновляются мгновенно внутри мой ListView
. Я также пробовал использовать notifyDataSetChanged()
, но все напрасно.
Я отправляю всю свою деятельность здесь, скажите, пожалуйста, где именно я установить мой адаптер, мой ArrayList
и notifyDataSetChanged()
public class Write_Answers extends ListActivity{
Boolean isInternetPresent = false;
ConnectionDetector cd;
TextView txtQuestions;
String questions;
EditText editAnswers;
Button btnAnswer;
String postAnswerUrl = "";
String getAnswerUrl = "";
public String answers;
SessionManager session;
String userType,deviceId,questionId;
ListView lvAnswers;
public static final String TAG_QUESTION_ID = "QId";
public static final String TAG_TRANSACTION_ID = "TransactionId";
public static final String TAG_ANSWERS = "Answer";
public static final String TAG_DATE= "Date";
public static final String TAG_TIME = "Time";
public static final String TAG_DEVICE_ID = "DeviceId";
public static final String TAG_USER_TYPE = "UserType";
ArrayList<HashMap<String, String>> answersList;
CustomAnswerAdapter customAnswerAdapter;
HashMap<String,String> ans_details_map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.write_answers);
cd = new ConnectionDetector(getApplicationContext());
isInternetPresent = cd.isConnectingToInternet();
txtQuestions = (TextView) findViewById(R.id.textQuestions);
editAnswers = (EditText) findViewById(R.id.edtAnswer);
btnAnswer = (Button) findViewById(R.id.btnAnswer);
questions = getIntent().getStringExtra("questions");
txtQuestions.setText(questions);
answersList = new ArrayList<HashMap<String, String>>();
customAnswerAdapter = new
CustomAnswerAdapter(Write_Answers.this,answersList);
lvAnswers = getListView();
lvAnswers.setAdapter(customAnswerAdapter);
pDialog = new ProgressDialog(this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
questionId = getIntent().getStringExtra("questionsId");
postAnswerUrl = "http://gps.traxistar.net/PostAnswers.svc/PostAnswers";
getAnswerUrl = "http://gps.traxistar.net/GetAnswers.svc/GetAnswers;
////////////// //////////// получаем данные с сервера, которые я должен установить для адаптера и показать в Listview ///////////////// //////
if (isInternetPresent) {
JsonArrayRequest jsonArrayRequest = new
JsonArrayRequest(getAnswerUrl,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d("Json Array", response.toString());
try {
for (int i = 0; i < response.length(); i++) {
JSONObject json = response.getJSONObject(i);
String ques_id =
json.getString(TAG_QUESTION_ID);
String trans_id =
json.getString(TAG_TRANSACTION_ID);
String device_id =
json.getString(TAG_DEVICE_ID);
String ans = json.getString(TAG_ANSWERS);
String answerDate =
json.getString(TAG_DATE);
String answerTime =
json.getString(TAG_TIME);
String userType =
json.getString(TAG_USER_TYPE);
ans_details_map = new HashMap<String,
String>();
ans_details_map.put(TAG_ANSWERS, ans);
ans_details_map.put(TAG_DATE, answerDate);
ans_details_map.put(TAG_TIME, answerTime);
answersList.add(ans_details_map);
}
} catch (Exception e) {
e.printStackTrace();
}
customAnswerAdapter.notifyDataSetChanged();
lvAnswers.setSelection(answersList.size() - 1);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d("Volley Error", "Error: " + error.getMessage());
Log.d("Error", "Error: " + error.getMessage());
}
});
AppController.getInstance().addToRequestQueue(jsonArrayRequest);
} else {
showAlertDialog(getApplicationContext(), "No Internet Connection",
"You don't have internet connection.",
false);
}
btnAnswer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
answers = editAnswers.getText().toString();
if (answers.equals("")) {
Toast.makeText(getBaseContext(), "Please write an answer",
Toast.LENGTH_LONG).show();
} else {
if (isInternetPresent) {
postAnswers();
editAnswers.setText("");
} else {
showAlertDialog(getApplicationContext(), "No Internet
Connection", "You don't have internet connection.",
false);
}
}
}
});
}
////////////////////////////// размещения данных на сервер по нажмите кнопку ////////////////////////////
private void postAnswers() {
Calendar in = Calendar.getInstance();
Date dt1 = new Date();
in.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
SimpleDateFormat sdf1 = new SimpleDateFormat("E, MMM d, yyyy");
String dateval = sdf1.format(dt1);
SimpleDateFormat stf1 = new SimpleDateFormat("h:mm a");
String timeval = stf1.format(dt1);
final String date1 = dateval.toString();
final String time1 = timeval.toString();
final String datetime = dateval.toString() + "T"
+ timeval.toString();
final String transId = deviceId + "" + datetime;
answers = editAnswers.getText().toString();
List<Map<String, String>> listMap =
new ArrayList<Map<String, String>>();
Map<String, String> answersMap = new HashMap<String, String>();
answersMap.put("TransactionId", transId);
answersMap.put("DeviceId", deviceId);
answersMap.put("Answer", answers);
answersMap.put("QId", questionId);
answersMap.put("Date", date1);
answersMap.put("Time", time1);
answersMap.put("UserType", userType);
listMap.add(answersMap);
JsonObjectRequest jsObjRequest = new
JsonObjectRequest(Request.Method.POST, postAnswerUrl,
String.valueOf(new JSONArray(listMap)), new
Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Write_Answers.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Answer
posted", Toast.LENGTH_LONG).show();
}
});
Log.d("Json Response ",response.toString());
}catch(Exception e){
//Log.d("JSON Array", response.toString());
e.printStackTrace();
}
//editAnswers.setText("");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Volley Error", error.toString());
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-type", "application/json; charset=utf-8");
return headers;
}
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse
response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
if (response.data == null || response.data.length == 0) {
return Response.success(new JSONObject(),
HttpHeaderParser.parseCacheHeaders(response));
} else {
return Response.success(new JSONObject(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
}
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
};
AppController.getInstance().addToRequestQueue(jsObjRequest);
}
Вы имеете в виду есть задержка в обновлении ListView? – Jas
@ Я не задерживаю, мне нужно либо использовать намерение обновить активность, либо вернуться и вернуться к этой операции, чтобы увидеть обновленный элемент. –
. Где вы получаете новые данные для отображения? – Jas