2016-08-15 7 views
0

私は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を達成するために役立ちます大きく評価される。あなたは、サーバーから正しいデータを取得していて、食料品の配列を移入していると仮定すると

答えて

1

は、あなたのBackgroundWorker AsyncTaskにonPostExecuteを追加して、データが変更されたことadapterGroceriesに通知する必要があります。

AysncTask.execute()の後にこれを行いますが、そこでは何もできません。​​がすぐに戻り、通知は実行されますが、まだ更新するものはありません。データが返ってから実行する必要があります。

+0

ありがとう。それは働いた:)申し訳ありません私はコメントし、早く答えを受け入れることができなかった – Jorge

関連する問題