gpt4 book ai didi

java - Android Studio无法在Fragment类和Thread之间传递TextView对象

转载 作者:行者123 更新时间:2023-12-01 19:59:28 25 4
gpt4 key购买 nike

错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

在线:

olxLoadingFragment.pricesTextView.setText("some text");

我有一个名为 OLXLoadingFragment 的 Fragment 类,它有一个嵌套在 ScrollView 中的 TextView。我基本上想在 OLXThread 中动态更新 TextView 的文本,但无法将该 TextView 对象传递给 OLXThread 本身。以下是可以帮助您的代码部分:

OLXLoadingFragment 类:

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ScrollView;
import android.widget.TextView;

import java.io.Serializable;

public class OLXLoadingFragment extends Fragment {
public static View OLXLoadingFragmentView;
public static ScrollView scrollViewPrices;
public static TextView pricesTextView;
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
OLXLoadingFragmentView = inflater.inflate(R.layout.fragment_olx_loading, container, false);
scrollViewPrices = OLXLoadingFragmentView.findViewById(R.id.olx_scroller);
pricesTextView = OLXLoadingFragmentView.findViewById(R.id.olx_prices_text);
return inflater.inflate(R.layout.fragment_olx_loading, container, false);
}
}

OLXThread 类:

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.widget.ScrollView;
import android.widget.TextView;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.w3c.dom.Text;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

import static android.app.PendingIntent.getActivity;

public class OLXThread extends Thread {
public static double fullSum = 0.0d;
public static ArrayList<String> pricesPerPage = new ArrayList<String>();
public static ArrayList<String> pricesPerPage2 = new ArrayList<String>();
public static ArrayList<String> prices = new ArrayList<String>();
public static String toSearch;
public static TextView olxpricesView;
public static Context context;
public OLXThread(String toSearch) {
this.toSearch = toSearch;
}

public void run() {
//SET SOME TEXT TO TEXTVIEW HERE
OLXLoadingFragment olxLoadingFragment = new OLXLoadingFragment();
olxLoadingFragment.pricesTextView.setText("some text"); //<- DOESN'T WORK!
}

OLXLoadingFragment xml 布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_height="match_parent">

<ImageView
android:id="@+id/imageView2"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@drawable/rectangle"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.82" />

<TextView
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:gravity="center"
android:text="@string/olx_loading_engl_text"
android:textColor="@color/limegreen"
android:textSize="30sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.82" />

<ImageView
android:id="@+id/imageView6"
android:layout_width="287dp"
android:layout_height="284dp"
android:src="@drawable/rectangle"
app:layout_constraintBottom_toBottomOf="@+id/olx_scroller"
app:layout_constraintEnd_toEndOf="@+id/olx_scroller"
app:layout_constraintStart_toStartOf="@+id/olx_scroller"
app:layout_constraintTop_toTopOf="@+id/olx_scroller" />

<ScrollView
android:id="@+id/olx_scroller"
android:layout_width="287dp"
android:layout_height="284dp"
android:layout_marginBottom="36dp"
android:fillViewport="true"
android:scrollbars="vertical"
app:layout_constraintBottom_toTopOf="@+id/imageView2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">

<TextView
android:id="@+id/olx_prices_text"
android:text="neki tekst"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"

/>
</ScrollView>
</android.support.constraint.ConstraintLayout>

请帮忙!

最佳答案

当你调用priceTextView.setText()方法时,Fragment的OnCreateView方法还没有被调用,所以priceTextView仍然为空,因为你只在onCreateView方法上设置了它的值。

在调用任何方法之前,您应该确保 ratesTextView 不为 null。

另请注意,唯一可以接触 View 的线程是 Ui 线程,因此即使您的 TextView 不为 null,您也无法在其他线程中修改它的属性

关于java - Android Studio无法在Fragment类和Thread之间传递TextView对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59013416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com