Saat ini saya sedang mengembangkan aplikasi fisika yang seharusnya menampilkan daftar formula dan bahkan menyelesaikannya (satu-satunya masalah adalah ListView
)
Ini adalah tata letak utama saya
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:measureWithLargestChild="false"
android:orientation="vertical"
tools:context=".CatList" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/titlebar" >
<TextView
android:id="@+id/Title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/app_name"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ff1c00"
android:textIsSelectable="false" />
</RelativeLayout>
<ListView
android:id="@+id/listFormulas"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
Dan ini adalah kegiatan utama saya
package com.wildsushii.quickphysics;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.res.AssetManager;
import android.view.Menu;
import android.widget.ListView;
public class CatList extends Activity {
public static String AssetJSONFile (String filename, Context context) throws IOException {
AssetManager manager = context.getAssets();
InputStream file = manager.open(filename);
byte[] formArray = new byte[file.available()];
file.read(formArray);
file.close();
return new String(formArray);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cat_list);
ListView categoriesL = (ListView)findViewById(R.id.listFormulas);
ArrayList<HashMap<String, String>> formList = new ArrayList<HashMap<String, String>>();
Context context = null;
try {
String jsonLocation = AssetJSONFile("formules.json", context);
JSONObject formArray = (new JSONObject()).getJSONObject("formules");
String formule = formArray.getString("formule");
String url = formArray.getString("url");
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
//My problem is here!!
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.cat_list, menu);
return true;
}
}
Saya sebenarnya tahu saya bisa membuat ini tanpa menggunakan JSON tapi saya perlu lebih banyak latihan parsing JSON. Ngomong-ngomong, ini adalah JSON
{
"formules": [
{
"formule": "Linear Motion",
"url": "qp1"
},
{
"formule": "Constant Acceleration Motion",
"url": "qp2"
},
{
"formule": "Projectile Motion",
"url": "qp3"
},
{
"formule": "Force",
"url": "qp4"
},
{
"formule": "Work, Power, Energy",
"url": "qp5"
},
{
"formule": "Rotary Motion",
"url": "qp6"
},
{
"formule": "Harmonic Motion",
"url": "qp7"
},
{
"formule": "Gravity",
"url": "qp8"
},
{
"formule": "Lateral and Longitudinal Waves",
"url": "qp9"
},
{
"formule": "Sound Waves",
"url": "qp10"
},
{
"formule": "Electrostatics",
"url": "qp11"
},
{
"formule": "Direct Current",
"url": "qp12"
},
{
"formule": "Magnetic Field",
"url": "qp13"
},
{
"formule": "Alternating Current",
"url": "qp14"
},
{
"formule": "Thermodynamics",
"url": "qp15"
},
{
"formule": "Hydrogen Atom",
"url": "qp16"
},
{
"formule": "Optics",
"url": "qp17"
},
{
"formule": "Modern Physics",
"url": "qp18"
},
{
"formule": "Hydrostatics",
"url": "qp19"
},
{
"formule": "Astronomy",
"url": "qp20"
}
]
}
Saya telah mencoba banyak hal dan bahkan menghapus seluruh proyek untuk membuat yang baru :(
Jawaban:
Seperti yang dijelaskan Faizan dalam jawaban mereka di sini :
Pertama-tama baca File Json dari file assests Anda menggunakan kode di bawah ini.
dan kemudian Anda cukup membaca string ini kembali dengan fungsi ini sebagai
dan gunakan metode ini seperti itu
Untuk perincian lebih lanjut mengenai JSON, Baca DI SINI
sumber
m_li.put("formula", formula);
harusm_li.put("formula", formula_value);
dan harus menggunakanLog
bukannya System.out.printlnApa yang kamu lakukan
Jadi ubah ke
Mengurai
Saya yakin Anda mendapatkan string dari folder assests.
sumber
Dengan Kotlin memiliki fungsi ekstensi ini untuk membaca file yang dikembalikan sebagai string.
fun AssetManager.readAssetsFile(fileName : String): String = open(fileName).bufferedReader().use{it.readText()}
Parsing string output menggunakan parser JSON apa saja.
sumber
Metode untuk membaca file JSON dari folder Aset dan kembali sebagai objek string.
Sekarang untuk mem-parsing data dalam aktivitas Anda: -
sumber
Kode sumber Cara mengambil Json Lokal dari folder Aset
https://drive.google.com/open?id=1NG1amTVWPNViim_caBr8eeB4zczTDK2p
sumber
Menggunakan OKIO
lalu...
sumber
Hanya meringkas jawaban @ libing dengan sampel yang berhasil untuk saya.
private fun AssetManager.readAssetsFile(fileName : String): String = open(fileName).bufferedReader().use{it.readText()}
Tanpa fungsi ekstensi ini, hal yang sama dapat dicapai dengan menggunakan
BufferedReader
danInputStreamReader
dengan cara ini:sumber
Jika Anda menggunakan Kotlin di android maka Anda dapat membuat fungsi Extension .
Fungsi Ekstensi didefinisikan di luar kelas apa pun - namun mereka merujuk nama kelas dan dapat digunakan
this
. Dalam kasus kami, kami menggunakanapplicationContext
.Jadi di kelas Utilitas, Anda dapat menentukan semua fungsi ekstensi.
Utility.kt
MainActivity.kt
Anda dapat mendefinisikan fungsi pribadi untuk memuat data JSON dari pernyataan seperti ini:
Anda harus melewati
facilityModelList
di AndaListView
FacilityModel.kt
Dalam kasus saya, respons JSON mulai dengan JSONArray
sumber