Передача данных из ListView в activity при onclick

#android #sqlite #listview

#Android #sqlite #listview

Вопрос:

AuctionList.java

 public class AuctionList extends AppCompatActivity {
ListView mListView;
ArrayList<Model> mList;
AuctionListAdapter mAdapter = null;
DatabaseHelperUpload mDBUpload;

TextView txtName,txtDescription,txtDuration,txtPrice;
ImageView imageViewIcon;

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

    mDBUpload = new DatabaseHelperUpload(this);
    mListView = findViewById(R.id.listView);
    mList = new ArrayList<>();
    mAdapter = new AuctionListAdapter(this,R.layout.row,mList);
    mListView.setAdapter(mAdapter);
    txtName = findViewById(R.id.txtName);
    txtDescription = findViewById(R.id.txtDescription);
    txtDuration = findViewById(R.id.txtDescription);
    txtPrice = findViewById(R.id.txtPrice);
}
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            String name = txtName.getText().toString();
            String description = txtDescription.getText().toString();
            String price = txtPrice.getText().toString();
            String duration = txtDuration.getText().toString();
            Intent intent5 = new Intent(AuctionList.this,BuyerHome.class);
            intent5.putExtra("name",name);
            intent5.putExtra("description",description);
            intent5.putExtra("price",price);
            intent5.putExtra("duration",duration);

            startActivity(intent5);
        }
    });
  

Activity.java

 Bundle bundle = getIntent().getExtras();

    String duration = bundle.getString("duration");
    String price = bundle.getString("price");

    TextView durationLog = (TextView)findViewById(R.id.text_view_countdown);
    TextView priceLog = (TextView)findViewById(R.id.textPrice);

    durationLog.setText(duration);
    priceLog.setText(price);
  

Model.java

 public class Model {
private int id;
private String name;
private String duration;
private String description;
private String price;
private byte[] image;

public Model(int id, String name,String description,String price,String duration, byte[] image) {
    this.id = id;
    this.name = name;
    this.description = description;
    this.price = price;
    this.duration = duration;
    this.image = image;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getPrice() {
    return price;
}

public void setPrice(String price) {
    this.price = price;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getDuration() {
    return duration;
}

public void setDuration(String duration) {
    this.duration = duration;
}


public byte[] getImage() {
    return image;
}

public void setImage(byte[] image) {
    this.image = image;
}
}
  

The activity.java коды являются частичными, поскольку я все еще пытаюсь. Итак, я просто пытаюсь получить два данных (продолжительность и цена).

Однако у меня возникла ошибка, и мое приложение продолжало сбоить. Могу ли я любезно спросить, что не так с моими кодами. На самом деле у меня есть код модели, как показано.

Ошибка:

 2019-03-23 00:30:58.046 11048-11048/com.example.jianminmong.aucon E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.jianminmong.aucon, PID: 11048
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.TextView.getText()' on a null object reference
    at com.example.jianminmong.aucon.AuctionList$1.onItemClick(AuctionList.java:63)
    at android.widget.AdapterView.performItemClick(AdapterView.java:318)
    at android.widget.AbsListView.performItemClick(AbsListView.java:1159)
    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3136)
    at android.widget.AbsListView$3.run(AbsListView.java:4052)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
  

Действительно ценю некоторую помощь здесь, поскольку это последняя часть моего проекта последнего года. Кстати, я здесь любитель, поэтому тем больше я нуждаюсь в помощи.

По сути, я просто хочу соответствующим образом извлечь данные из listview и просто инициализировать значения, amp;amp;amp; не следует сбрасывать данные обратно всякий раз, когда я их нажимаю, потому что действие требует, чтобы оно выполнялось в фоновом режиме (например, по таймеру)

Ответ №1:

Проблема с вашим Textview при получении текста из Textview в то время, когда какой-либо Textview не привязан к xml, вот почему ваше приложение потерпело крах.

    mListView.setOnItemClickListener(new. 
   AdapterView.OnItemClickListener() {
       @Override
         public void onItemClick(AdapterView<?> parent, 
         View view, int position, long id) {

        String name = txtName.getText().toString();
        String description = 
         txtDescription.getText().toString();
        String price = txtPrice.getText().toString();
        String duration = txtDuration.getText().toString();
        Intent intent5 = new Intent(AuctionList.this,BuyerHome.class);
        intent5.putExtra("name",name);
        intent5.putExtra("description",description);
        intent5.putExtra("price",price);
        intent5.putExtra("duration",duration);

        startActivity(intent5);
    }
});
  

Комментарии:

1. Я инициализировал alr, просто я не показывал его здесь. Или я неправильно понял ваше объяснение? Можете ли вы показать мне, что я должен делать? И я только что отредактировал коды, показывающие мою инициализацию.

2. Я уже знаю, в чем проблема, но я не уверен, как ее решить. Я извлекаю данные из другого XML-файла. Но я не могу изменить XML-файл для этого java-файла. Есть ли какой-нибудь способ решить?