javascript - データベースからリストビューにjsonとphpを入力する

原文 javascript php android json listview

ここのチュートリアルhttp://www.learn2crack.com/2013/11/listview-from-json-example.htmlに従ってリストビューを作成しようとしていますが、getDataボタンを押してもデータが表示されません。私はjsonを使用してphpから私のandroidアプリに配列を渡すのに失敗したようですので、私は助けが必要です

編集:最近、phpから値を渡すことができましたが、リストビューで値を設定できませんでした。アクティビティを実行すると、logcat出力テキストは次のようになります。



06-04 09:10:23.844: D/JSON Parser(4058): {"pendaftar":[[{"no_pendaftaran":"AD-15-001","nama_lengkap":"Wanda"},{"no_pendaftaran":"AD-15-002","nama_lengkap":"Skndje"},{"no_pendaftaran":"AD-15-003","nama_lengkap":"Aksn"}]]} 





そして私は私のphpコードを編集します:



 //fetching all the rows from the query
	$row = $stmt->fetchAll();
	$response["pendaftar"][]= $row;
    
	echo json_encode($response);





これがリストビューを表示する私の活動です:



package subactivity;

import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import id.wanda.smkkkristenimmanuelii.JSONParser;
import id.wanda.smkkkristenimmanuelii.R;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class SeleksiNilai extends Activity {

	ListView list;
    TextView noPendaftaran;
    TextView namaPendaftar;
    Button Btngetdata;
    ArrayList<HashMap<String, String>> calonSiswa = new ArrayList<HashMap<String, String>>();
    JSONParser jParser = new JSONParser();
    
  //URL to get JSON Array
    private static String url = "http://192.168.1.110/smkkimmanuel2/seleksiNilai.php";
 
    //JSON Node Names
    private static final String TAG_OS = "pendaftar";
    private static final String TAG_NO_PENDAFTARAN = "no_pendaftaran";
    private static final String TAG_NAMA_LENGKAP = "nama_lengkap";
    
    JSONArray pendaftar = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_seleksi_nilai);
		calonSiswa = new ArrayList<HashMap<String, String>>();
		 
        Btngetdata = (Button)findViewById(R.id.getdata);
        Btngetdata.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View view) {
                 new GetData().execute();
 
            }
        });
	}

	private class GetData extends AsyncTask<String, String, JSONObject> {
        private ProgressDialog pDialog;
       @Override
       protected void onPreExecute() {
           super.onPreExecute();
            noPendaftaran = (TextView)findViewById(R.id.noPendaftar);
            namaPendaftar = (TextView)findViewById(R.id.namaPendaftar);
           pDialog = new ProgressDialog(SeleksiNilai.this);
           pDialog.setMessage("Getting Data ...");
           pDialog.setIndeterminate(false);
           pDialog.setCancelable(true);
           pDialog.show();

       }

       @Override
       protected JSONObject doInBackground(String... args) {

           // Getting JSON from URL
           JSONObject json = jParser.getJSONFromUrl(url);
           return json;
       }
        @Override
        protected void onPostExecute(JSONObject json) {
            pDialog.dismiss();
            try {
                   // Getting JSON Array from URL
                   pendaftar = json.getJSONArray(TAG_OS);
                   for(int i = 0; i < pendaftar.length(); i++){
                   JSONObject c = pendaftar.getJSONObject(i);

                   // Storing  JSON item in a Variable
                   String ver = c.getString(TAG_NO_PENDAFTARAN);
                   String name = c.getString(TAG_NAMA_LENGKAP);

                   // Adding value HashMap key => value

                   HashMap<String, String> map = new HashMap<String, String>();

                   map.put(TAG_NO_PENDAFTARAN, ver);
                   map.put(TAG_NAMA_LENGKAP, name);

                   calonSiswa.add(map);
                   list=(ListView)findViewById(R.id.list);

                   ListAdapter adapter = new SimpleAdapter(SeleksiNilai.this, calonSiswa,
                           R.layout.single_item_seleksi_nilai,
                           new String[] { TAG_NO_PENDAFTARAN,TAG_NAMA_LENGKAP }, new int[] {
                                   R.id.noPendaftar,R.id.namaPendaftar});

                   list.setAdapter(adapter);
                   list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

					@Override
					public void onItemClick(AdapterView<?> parent, View view,
							int position, long id) {
						// TODO Auto-generated method stub
						Toast.makeText(SeleksiNilai.this, "You Clicked at "+calonSiswa.get(+position).get("name"), Toast.LENGTH_SHORT).show();
						
					}
                   });

                   }
           } catch (JSONException e) {
               e.printStackTrace();
           }

        }
   }
}





そして、これがデータをフェッチするphpコードです:



<?php

//load and connect to MySQL database stuff
require("config.php");

    //gets user's info based off of a username.
    $query = "SELECT no_pendaftaran,nama_lengkap FROM pendaftaran";
    
    
    try {
        $stmt   = $db->prepare($query);
        $stmt->execute();
    }
    catch (PDOException $ex) {
        // For testing, you could use a die and message. 
        //die("Failed to run query: " . $ex->getMessage());
        
        //or just use this use this one to product JSON data:
        $response["success"] = 0;
        $response["message"] = "Database Error1. Please Try Again!";
        die(json_encode($response));
        
    }
    
    //fetching all the rows from the query
	$row = $stmt->fetchAll();
	$arr['pendaftar'][]= $row;
    
    
	$json = json_encode($arr);

	$json_encoded_string = json_encode($arr);
	$json_encoded_string = str_replace("\\/", '/', $json_encoded_string);
	echo $json_encoded_string;

?> 





PHP出力:

{"pendaftar":[[{"no_pendaftaran":"AD-15-001","nama_lengkap":"Wanda"}]]} 
答え
私はついにリストビューで配列を表示することができました、問題は私のphpコードに残っています:



//fetching all the rows from the query
	$row = $stmt->fetchAll();
  
  //here, the problem is the bracket []
	$response["pendaftar"][]= $row;
  //here

	echo json_encode($response);





私がする必要があるのは、ブラケットを削除することだけです。他の誰かが配列の出力を見てそれを見つけ出します。
私のphp出力は次のようになり、二重角かっこがあります[]:



{"pendaftar":[[{"no_pendaftaran":"AD-15-001","nama_lengkap":"Wanda"},{"no_pendaftaran":"AD-15-002","nama_lengkap":"Skndje"},{"no_pendaftaran":"AD-15-003","nama_lengkap":"Aksn"}]]} 





他の人はブラケットが1つしかありませんが、理由はわかりませんが、自分で問題を解決しました。
関連記事

javascript - Angular JSフィルターが予期せず機能しますか?

javascript - mvcビューでアクション結果にリダイレクトするにはどうすればよいですか

javascript - 同じ関数でjqueryの異なるレベルのネストされたJSON値にアクセスする

javascript - 透明なHTML / CSSボタンから見えない?

javascript - keypressイベントの入力フィールドにスペースを入れない

javascript - クリックしても、Jsonからのチェックボックスにアラートが表示されない

javascript - 1つのクラスへのCSS追加の疑似要素(前、後、+その他)

javascript - JSTreeからチェックIDを取得-Get_Checkedはノードを検出しますが、IDは検出しません

javascript - 個別のボタンのブートストラップのクリックでモーダル内のナビゲーションタブのアクティブクラスを変更しようとしています

javascript - 関数のパラメーターで既に参照されているグローバル変数を参照する方法は?