Я изучаю, как извлекать данные, хранящиеся в Parse. Я могу извлекать данные из синтаксического анализа и связывать их с простым ListView. Теперь я пытаюсь издеваться над простым чат-приложением. У меня есть два столбца в классе parse для хранения имени отправителя и сообщения чата. Я сделал пользовательские ListView, чтобы показать имя отправителя и сообщение, как показано нижеAndroid - Сохранение объектов в список объектов
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/UserNameTxt"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5sp"
android:textColor="@color/material_blue_grey_900"
android:textSize="15sp" />
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/UserMessageTxt"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5sp"
android:textColor="@color/material_blue_grey_900"
android:textSize="25sp" />
</LinearLayout>
и класса адаптера для привязки данных
public class ChatAdapter extends ArrayAdapter<Chat> {
Context context;
int layoutResourceId;
Chat data[] = null;
public ChatAdapter(Context context, int resource, Chat[] objects) {
super(context, resource, objects);
this.layoutResourceId=resource;
this.context=context;
this.data=objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row=convertView;
ChatHolder holder=null;
if(row==null)
{
LayoutInflater inflater=((Activity)context).getLayoutInflater();
row=inflater.inflate(layoutResourceId,parent,false);
holder= new ChatHolder();
holder.UserName=(TextView)row.findViewById(R.id.UserNameTxt);
holder.UserMessage=(TextView)row.findViewById(R.id.UserMessageTxt);
row.setTag(holder);
}
else
{
holder=(ChatHolder)row.getTag();
}
Chat chat=data[position];
holder.UserName.setText(Chat.UserName);
holder.UserMessage.setText(Chat.UserMessage);
return row;
}
static class ChatHolder
{
TextView UserName;
TextView UserMessage;
}
}
и класса чата является
public class Chat {
public static String UserName;
public static String UserMessage;
public Chat()
{
super();
}
public Chat(String _UserName,String _UserMessage)
{
super();
UserName=_UserName;
UserMessage=_UserMessage;
}
public String getName()
{
return UserName;
}
}
Код для основной деятельности (я только что включил важные детали)
List<Chat> chatData=new ArrayList<Chat>();
@Override
protected Void doInBackground(Void... params) {
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
"Chat");
try {
ob = query.find();
} catch (ParseException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
Chat c;
listview = (ListView) findViewById(R.id.listView);
for (ParseObject country : ob) {
chatData.add(new Chat((String) country.get("Sender"),(String) country.get("ChatMessage")));
}
String name01=chatData.get(0).getName(); //for debugging
String name02=chatData.get(1).getName(); //for debugging
String name03=chatData.get(2).getName(); //for debugging
Chat chatArray[]=chatData.toArray(new Chat[chatData.size()]);
String name=chatArray[0].getName(); //for debugging
String name1=chatArray[1].getName(); //for debugging
String name2=chatArray[2].getName(); //for debugging
ChatAdapter cAdapter=new ChatAdapter(MainActivity.this,R.layout.listview_item,chatArray);
listview.setAdapter(cAdapter);
mProgressDialog.dismiss();
}
Снимок экрана с выходом http://i.stack.imgur.com/bxnto.png
У меня есть три строки данных в моем классе Parse. В качестве вывода я получаю последнюю вставленную строку всего три раза. Вот скриншот отладки Windows http://i.stack.imgur.com/l7CAs.png
Внутри цикла Я получаю правильные значения из синтаксического анализа, но после добавления его в список chatData происходит что-то неправильное.
Это мой первый вопрос здесь. Мне очень жаль большую должность, и если я не понимаю этого вопроса. Спасибо
Никто не будет читать через весь этот код. Постарайтесь создать как можно более короткий случай, который не работает должным образом. Скорее всего, вы сами найдете свою ошибку. – Ridcully
Жаль, что я не согласен. OP сделала отличную работу по предоставлению необходимых деталей. Если вы следуете большинству вопросов, первый комментарий обычно заключается в том, чтобы попросить OP разместить файл макета, код и т. Д. На самом деле, я действительно впечатлен OP, фактически вставляющим только соответствующий код и помещающий снимки экрана обоих выходных данных образ и отладочное изображение. – Raghu
Поскольку вы не инициализируете массив chartdata и не добавляете, может быть, у вас есть более 3 элементов, и первые 3 элемента имеют некорректные данные? Когда вы отлаживаете, можете ли вы проверить, что содержит диаграммы после добавления элементов из запроса Parse? – Raghu