【发布时间】:2020-07-28 14:37:47
【问题描述】:
所以我正在尝试实现一个我从开源项目中获取的 xml 文件并将其附加到一个 recyclerview 并且每当我这样做时,我的应用程序以太崩溃或者它不显示 xml 文件,我不是很清楚为什么!
请帮我解决这个问题
这是我到达的地方
类似于我的 xml 文件的 XML 示例
<quran>
<sura index="1" name="الفاتحة">
<aya index="1" text="بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ" />
<aya index="2" text="الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ" />
<aya index="3" text="الرَّحْمَنِ الرَّحِيمِ" />
<aya index="4" text="مَالِكِ يَوْمِ الدِّينِ" />
<aya index="5" text="إِيَّاكَ نَعْبُدُ وَإِيَّاكَ نَسْتَعِينُ" />
<aya index="6" text="اهْدِنَا الصِّرَاطَ الْمُسْتَقِيمَ" />
<aya index="7" text="صِرَاطَ الَّذِينَ أَنْعَمْتَ عَلَيْهِمْ غَيْرِ الْمَغْضُوبِ عَلَيْهِمْ وَلَا الضَّالِّينَ" />
</sura>
<sura index="2" name="البقرة">
<aya index="1" text="الم" bismillah="بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ" />
<aya index="2" text="ذَلِكَ الْكِتَابُ لَا رَيْبَ فِيهِ هُدًى لِلْمُتَّقِينَ" />
<aya index="3" text="الَّذِينَ يُؤْمِنُونَ بِالْغَيْبِ وَيُقِيمُونَ الصَّلَاةَ وَمِمَّا رَزَقْنَاهُمْ يُنْفِقُونَ" />
<aya index="4" text="وَالَّذِينَ يُؤْمِنُونَ بِمَا أُنْزِلَ إِلَيْكَ وَمَا أُنْزِلَ مِنْ قَبْلِكَ وَبِالْآخِرَةِ هُمْ يُوقِنُونَ" />
<aya index="5" text="أُولَئِكَ عَلَى هُدًى مِنْ رَبِّهِمْ وَأُولَئِكَ هُمُ الْمُفْلِحُونَ" />
<aya index="6" text="إِنَّ الَّذِينَ كَفَرُوا سَوَاءٌ عَلَيْهِمْ أَأَنْذَرْتَهُمْ أَمْ لَمْ تُنْذِرْهُمْ لَا يُؤْمِنُونَ" />
<aya index="7" text="خَتَمَ اللَّهُ عَلَى قُلُوبِهِمْ وَعَلَى سَمْعِهِمْ وَعَلَى أَبْصَارِهِمْ غِشَاوَةٌ وَلَهُمْ عَذَابٌ عَظِيمٌ" />
<aya index="8" text="وَمِنَ النَّاسِ مَنْ يَقُولُ آمَنَّا بِاللَّهِ وَبِالْيَوْمِ الْآخِرِ وَمَا هُمْ بِمُؤْمِنِينَ" />
<aya index="9" text="يُخَادِعُونَ اللَّهَ وَالَّذِينَ آمَنُوا وَمَا يَخْدَعُونَ إِلَّا أَنْفُسَهُمْ وَمَا يَشْعُرُونَ" />
<aya index="10" text="فِي قُلُوبِهِمْ مَرَضٌ فَزَادَهُمُ اللَّهُ مَرَضًا وَلَهُمْ عَذَابٌ أَلِيمٌ بِمَا كَانُوا يَكْذِبُونَ" />
<aya index="11" text="وَإِذَا قِيلَ لَهُمْ لَا تُفْسِدُوا فِي الْأَرْضِ قَالُوا إِنَّمَا نَحْنُ مُصْلِحُونَ" />
<aya index="12" text="أَلَا إِنَّهُمْ هُمُ الْمُفْسِدُونَ وَلَكِنْ لَا يَشْعُرُونَ" />
</sura>
我的班级
class Sura {
var index: String? = null
var name: String? = null
var text: String? = null
var bismillah : String? = null
override fun toString(): String{
return "Index = $index\n Name = $name\n Text = $text\n Bismillah = $bismillah"
}
}
Xml 处理程序
class xmlPullHandler {
private val quran = ArrayList<Sura>()
private var quran1 : Sura? = null
private var text1 : String? = null
fun parse(inputStream: InputStream): List<Sura>{
try {
val factory = XmlPullParserFactory.newInstance()
factory.isNamespaceAware = true
val parser = factory.newPullParser()
parser.setInput(inputStream, null)
var eventType = parser.eventType
while (eventType != XmlPullParser.START_DOCUMENT){
var tagName = parser.name
when (eventType){
XmlPullParser.START_TAG -> if (tagName.equals("quran1", ignoreCase = true)){
quran1 = Sura()
}
XmlPullParser.TEXT -> text1 = parser.text
XmlPullParser.END_TAG -> if (tagName.equals("quran1", ignoreCase = true)){
quran1?.let { quran.add(it) }
}else if (tagName.equals("index", ignoreCase = true)){
quran1!!.index = text1
}else if (tagName.equals("name", ignoreCase = true)){
quran1!!.name = text1
}else if (tagName.equals("text", ignoreCase = true)){
quran1!!.text = text1
}else if (tagName.equals("bismillah", ignoreCase = true)){
quran1!!.bismillah = text1
}
else ->{
}
}
eventType = parser.next()
}
}catch (e: XmlPullParserException){
e.printStackTrace()
}catch (e: IOException){
e.printStackTrace()
}
return quran
}
}
我的 Recycler 视图适配器
class SuraAdabters (private var quran: MutableList<Sura> ):RecyclerView.Adapter<SuraAdabters.SuraHolder>() {
private var quran1 : Sura? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SuraHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.quranlayouts, parent , false)
return SuraHolder(view)
}
override fun getItemCount(): Int = quran.size
override fun onBindViewHolder(holder: SuraHolder, position: Int) {
quran[position]
var text = holder.itemView.findViewById<TextView>(R.id.QuranText)
}
class SuraHolder(itemview: View):RecyclerView.ViewHolder(itemview){
}
}
我的碎片,包含 rcycler
class guranFragments : Fragment() {
var quran = arrayListOf<Sura>()
private lateinit var myAdapter: SuraAdabters
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_guran_fragments, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
myAdapter = SuraAdabters(quran)
SuraRecycler.layoutManager = LinearLayoutManager(this.context)
SuraRecycler.addItemDecoration(DividerItemDecoration(this.context, OrientationHelper.VERTICAL))
SuraRecycler.adapter = myAdapter
try {
val parser = xmlPullHandler()
val assets = context!!.assets.open("quran.xml")
parser.parse(assets)
myAdapter = SuraAdabters(quran)
}catch (io: IOException){
io.printStackTrace()
}
}
这是我希望数据以这种格式显示的回收器视图的 xml 样式
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/QuranText"
android:textAlignment="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello"
android:textSize="40sp" />
<TextView
android:id="@+id/textaya"
android:text="Hello"
android:textSize="40sp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<TextView
android:id="@+id/pageNumber"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Hello"
android:textSize="40sp" />
</LinearLayout>
个人电脑请帮助我使用 kotlin,因为我不懂 Java 或除 kotlin 之外的任何其他语言
我几乎尝试了所有方法,但 xml 数据没有出现在我的应用程序中 请帮助并提前感谢...
【问题讨论】:
-
添加堆栈跟踪
-
堆栈跟踪是什么意思?
-
ctrl+6 记录错误
-
你的错误是什么?
-
我要复制logcat中的所有错误吗?
标签: android xml android-studio kotlin android-recyclerview