簡體   English   中英

PHP錯誤在列表視圖中顯示數據庫中的數據

[英]PHP error in showing data from database in a listview

我目前正在嘗試在ListView的數據庫中顯示我的數據。 在此ListView中,我只希望從表中顯示Skriptename。 如果我按下按鈕floatingasWord什么也沒有發生,我得到的是沒有名字的DataParser類傳遞一個錯誤。

W/System.err: org.json.JSONException: No value for name
W/System.err:     at org.json.JSONObject.get(JSONObject.java:389)
W/System.err:     at org.json.JSONObject.getString(JSONObject.java:550)
W/System.err:     at 
com.ndlp.socialstudy.MySQL.DataParser.parseData(DataParser.java:71)
W/System.err:     at 
com.ndlp.socialstudy.MySQL.DataParser.doInBackground(DataParser.java:43)
W/System.err:     at 
com.ndlp.socialstudy.MySQL.DataParser.doInBackground(DataParser.java:20)

我還在該論壇上研究了許多其他類似的主題,但是找不到解決我問題的方法。

Informatikskripte活動:

floatingasWord.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new Downloader(InformatikSkripteActivity.this, urlAddress, lv_skripteInformatik).execute();
        }
    });

下載類

public class Downloader extends AsyncTask<Void,Void,String> {


Context c;
String urlAddress;
ListView lv_skripteInformatik;
ProgressDialog pd;



public Downloader(Context c, String urlAddress, ListView lv_skripteInformatik) {
    this.c = c;
    this.urlAddress = urlAddress;
    this.lv_skripteInformatik = lv_skripteInformatik;
}
@Override
protected void onPreExecute() {
    super.onPreExecute();
    pd = new ProgressDialog(c);
    pd.setTitle("Retrieve");
    pd.setMessage("Retrieving..Please wait");
    pd.show();
}
@Override
protected String doInBackground(Void... params) {
    return this.downloadData();
}
@Override
protected void onPostExecute(String jsonData) {
    super.onPostExecute(jsonData);

    pd.dismiss();

    if(jsonData.startsWith("Error"))
    {
        Toast.makeText(c,"Unsuccessful "+jsonData, Toast.LENGTH_SHORT).show();
    }else
    {
        //PARSE
        new DataParser(c,jsonData,lv_skripteInformatik).execute();
    }
}
private String downloadData()
{
    Object connection = Connector.connect(urlAddress);
    if(connection.toString().startsWith("Error"))
    {
        return connection.toString();
    }
    try {
        HttpURLConnection con= (HttpURLConnection) connection;

        InputStream is=new BufferedInputStream(con.getInputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        String line;

        StringBuffer jsonData=new StringBuffer();

        while ((line=br.readLine()) != null)
        {
            jsonData.append(line+"n");
        }

        br.close();
        is.close();

        return jsonData.toString();

    } catch (IOException e) {
        e.printStackTrace();
        return "Error "+e.getMessage();
    }
}
}

連接器類別

public class Connector {

public static Object connect(String urlAddress)
{
    try
    {

        URL url=new URL(urlAddress);
        HttpURLConnection con= (HttpURLConnection) url.openConnection();
        //SET CON PROPERTIES
        con.setRequestMethod("GET");
        con.setConnectTimeout(15000);
        con.setReadTimeout(15000);
        con.setDoInput(true);

        return con;

    } catch (MalformedURLException e) {
        e.printStackTrace();
        return "Error "+e.getMessage();

    } catch (IOException e) {
        e.printStackTrace();
        return "Error "+e.getMessage();

    }
}
}

DataParser類

public class DataParser extends AsyncTask<Void,Void,Boolean> {

Context c;
String jsonData;
ListView lv_skripteInformatik;
ProgressDialog pd;
ArrayList<String> arrayList=new ArrayList<>();

public DataParser(Context c, String jsonData, ListView lv_skripteInformatik) {
    this.c = c;
    this.jsonData = jsonData;
    this.lv_skripteInformatik = lv_skripteInformatik;
}
@Override
protected void onPreExecute() {
    super.onPreExecute();
    pd=new ProgressDialog(c);
    pd.setTitle("Parse");
    pd.setMessage("Pasring..Please wait");
    pd.show();
}
@Override
protected Boolean doInBackground(Void... params) {
    return this.parseData();
}

@Override
protected void onPostExecute(Boolean result) {
    super.onPostExecute(result);
    pd.dismiss();
    if(result)
    {
        ArrayAdapter adapter=new ArrayAdapter(c,android.R.layout.simple_list_item_1,arrayList);
        lv_skripteInformatik.setAdapter(adapter);
        lv_skripteInformatik.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(c, arrayList.get(position), Toast.LENGTH_SHORT).show();
            }
        });
    }
}
private Boolean parseData()
{
    try
    {
        JSONArray ja = new JSONArray(jsonData);
        JSONObject jo;
        arrayList.clear();
        for (int i = 0; i < ja.length(); i++) {
            jo = ja.getJSONObject(i);
            String name = jo.getString("name");
            arrayList.add(name);
        }
        return true;
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return false;
}
}

PHP腳本:

<?php
$servername = "localhost";
$username = "d027c34a";
$password = "password";
$dbname = "d027c34a";

$con = mysqli_connect($servername, $username, $password, $dbname) or die 
('Unable to connect');

if(mysqli_connect_error($con))
{
    echo "Failed to Connect to Database".mysqli_connect_error();
}

$sql="SELECT Skriptname FROM skripte";

$result=mysqli_query($con,$sql);
if($result)
{
    while($row=mysqli_fetch_array($result))
    {
        $data[]=$row;
    }

    print(json_encode($data));
}

mysqli_close($con);

?>

腳本的輸出:

[{"0":"Matheskript","Skriptname":"Matheskript"},{"0":"Informatikskript","Skriptname":"Informatikskript"}]

您正在嘗試訪問一個名為name的字段,但您的json沒有。 將代碼jo.getString("name")替換為jo.getString("Skriptname")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM