私はAndroidプログラミングの初心者です。タイトルに記載されている問題が私を苦しめています。
私は自分のローカルホストでMySQLデータベースにGroceries
のテーブルを持っている:Spinnerを使用してMySQLのアイテムでAndroidリストビューを設定する
id----name---------type
1 apple fruit
2 banana fruit
3 lettuce vegetable
4 apricot fruit
5 cauliflower vegetable
私もスピナー、私のAndroidアプリケーションでListViewコントロールを持っています。 Spinnerには、項目がある文字列配列の項目があり、fruit
& vegetable
です。
ユーザーがSpinnerのタイプをfruit
またはvegetable
のいずれかとして選択すると、リストビューにMySQLの対応するタイプの名前が設定されます。
これまで私がこれまで行ってきたことは次のとおりです。
MainActivity
クラス:
package com.example.mine.application;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
public Spinner groceryTypes;
public ListView groceries;
public static List<String> arrayGroceries;
ArrayAdapter<String> adapterGroceries;
@Override
protected void onCreate(Bundle savedInstanceState) {
groceryTypes = (Spinner) findViewById(R.id.groceryTypes_spinner);
groceries = (ListView) findViewById(R.id.groceries_listView);
arrayGroceries = new ArrayList<>();
adapterGroceries = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, arrayGroceries);
groceries.setAdapter(adapterGroceries);
groceryTypes.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
BackgroundWorker backgroundWorker = new BackgroundWorker(MainActivity.this);
backgroundWorker.execute(groceryTypes.getItemAtPosition(position).toString());
adapterGroceries.notifyDataSetChanged();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
//TODO Auto-generated method stub
}
});
}
BackgroundWorker
クラス:ここ
package com.example.mine.application;
import android.content.Context;
import android.os.AsyncTask;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class BackgroundWorker extends AsyncTask<String, Void, String> {
Context context;
BackgroundWorker(Context ctx){
context = ctx;
}
@Override
protected String doInBackground(String... params) {
String groceries_URL = "http://10.0.2.2/groceries.php";
String groceryType = params[0];
try {
URL url = new URL(groceries_URL);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
OutputStream outputStream = httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter
(new OutputStreamWriter(outputStream, "UTF-8"));
String post_data = URLEncoder.encode("grocery_type", "UTF-8")+"="+URLEncoder.encode(groceryType, "UTF-8");
bufferedWriter.write(post_data);
bufferedWriter.flush();
bufferedWriter.close();
outputStream.close();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader
(new InputStreamReader(inputStream, "iso-8859-1"));
MainActivity.arrayGroceries.clear();
String line;
while ((line = bufferedReader.readLine()) != null) {
MainActivity.arrayGroceries.add(line);
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return null;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
は私groceries.php
です:
<?php
require "conn.php";
$grocery_type = $_POST["grocery_type"];
$qry = "SELECT name FROM groceries WHERE type LIKE '$grocery_type';";
$result = mysqli_query($conn, $qry);
while($row = mysqli_fetch_row($result)) {
echo $row[1];
}
mysqli_free_result($result);
$conn->close();
?>
私は、問題は、私は、クエリから複数の項目を処理する方法であると思いますが、任意の説明とthを達成するために役立ちます大きく評価される。あなたは、サーバーから正しいデータを取得していて、食料品の配列を移入していると仮定すると
ありがとう。それは働いた:)申し訳ありません私はコメントし、早く答えを受け入れることができなかった – Jorge