[英]error in query using MySQL and PHP, based on showing data from database
[英]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.