Java 如何从JSON为列表视图设置条件
我想让listview中的listview数据只来自windy的名称,来自我的json文件。有人能告诉我哪里出了错吗? 我在json数组中设置一个条件,将其放入listview。 它应该显示json中的所有数据,并将其放入listview,因为x==y是正确的,但什么都没有发生,只有空的listview。 当我制作System.out.printlnx++y时;为了确保没有空,它会显示x和y的值,即windy和windy,根据我设置的条件,它应该只在列表视图中显示windy的名称。但是当我做x的时候显示从json到listview的所有数据。 非常感谢你们 这是我做的条件的零件代码Java 如何从JSON为列表视图设置条件,java,android,json,listview,Java,Android,Json,Listview,我想让listview中的listview数据只来自windy的名称,来自我的json文件。有人能告诉我哪里出了错吗? 我在json数组中设置一个条件,将其放入listview。 它应该显示json中的所有数据,并将其放入listview,因为x==y是正确的,但什么都没有发生,只有空的listview。 当我制作System.out.printlnx++y时;为了确保没有空,它会显示x和y的值,即windy和windy,根据我设置的条件,它应该只在列表视图中显示windy的名称。但是当我做x的
for(int i = 0; i < str_json.length(); i++){
JSONObject ar = str_json.getJSONObject(i);
String x = ar.getString("nama");
String y = "windy";
System.out.println(x +" "+ y);
//the conditon that i mean.
//when i make if(x!=y), it show all the data from json to listview, not only "windy"
if( x == y){
HashMap<String, String> map = new HashMap<String, String>();
String nama = ar.getString("nama");
String judul = ar.getString("judul");
String komen = ar.getString("komen");
String jawaban = ar.getString("jawaban");
String created_at = ar.getString("created_at");
map.put(tanya_nama, nama);
map.put(tanya_judul, judul);
map.put(tanya_komen, komen);
map.put(tanya_jawaban, jawaban);
map.put(tanya_waktu, created_at);
data_map.add(map);
这是完整的代码
public class semuatempat extends ListActivity {
static String tanya_nama = "nama";
static String tanya_judul = "judul";
static String tanya_komen = "komen";
static String tanya_jawaban = "jawaban";
static String tanya_waktu = "created_at";
JSONArray str_json = null;
public String lo_Koneksi,isi ;
// Search EditText
EditText inputSearch;
//Listview Adapter
SimpleAdapter adapter;
ListView lv;
private ProgressDialog pDialog;
ArrayList<HashMap<String, String>> data_map = new ArrayList<HashMap<String, String>> ();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.utama);
Koneksi lo_Koneksi = new Koneksi();
isi = lo_Koneksi.isi_koneksi();
new AmbilData().execute();
}
class AmbilData extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(semuatempat.this);
pDialog.setMessage("loading ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
protected String doInBackground(String... args) {
String link_url = isi+"komentar.php";
JSONParsena jParser = new JSONParsena();
JSONObject json = jParser.AmbilJson(link_url);
try {
str_json = json.getJSONArray("komentar");
DatabaseHandler db = new DatabaseHandler(getApplicationContext());
/**
* Hashmap to load data from the Sqlite database
**/
HashMap<String,String> user = new HashMap<String, String>();
user = db.getUserDetails();
for(int i = 0; i < str_json.length(); i++){
JSONObject ar = str_json.getJSONObject(i);
String x = ar.getString("nama");
String y = "windy";
System.out.println(x +" "+ y);
if( x == y){
HashMap<String, String> map = new HashMap<String, String>();
String nama = ar.getString("nama");
String judul = ar.getString("judul");
String komen = ar.getString("komen");
String jawaban = ar.getString("jawaban");
String created_at = ar.getString("created_at");
map.put(tanya_nama, nama);
map.put(tanya_judul, judul);
map.put(tanya_komen, komen);
map.put(tanya_jawaban, jawaban);
map.put(tanya_waktu, created_at);
data_map.add(map);
}
else{
System.out.println(" cacad ");
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
runOnUiThread(new Runnable() {
public void run() {
adapter = new SimpleAdapter(
semuatempat.this, data_map,
R.layout.list_item, new String[] { tanya_nama, tanya_judul, tanya_komen,tanya_jawaban,tanya_waktu},
new int[] {R.id.nama, R.id.alamat, R.id.lat,R.id.lng,R.id.waktu});
setListAdapter(adapter);
}
});
问题在于您编写的字符串比较函数:
x == y
将其替换为:
if (x.equals(y))
因为x和y是字符串。更改
如果x==y
到
如果x.equalsy,因为您正在比较字符串
那么在你的任务中,也许你应该改变
类AmbilData扩展AsyncTaskString、String、String
到
类AmbilData扩展了AsyncTaskString、String、HashMap{
在方法doInBackground中
protected String doInBackground(String... args) {
// rest of your method
return map;
}
将onPostExecute方法更改为:
protected void onPostExecute(HashMap<String,String> map) {
// adapting your hashmap to listview
}
我还没有测试它。但是,它应该可以工作。x和y是字符串,所以尝试使用等于而不是==同样,您已经保护了字符串doInBackground,但返回null。