2016-05-26 13 views
-1

コードにエラーはありませんが、スピナーのデータは表示されません。 phpファイルをチェックすると、デスクトップ上でデータが正常に取得されます。この問題のトラブルシューティング方法に関するアドバイスをお願いします。MySQLデータベースからデータを取得する際のAndroid Studio Spinnerの問題

MainActivity.java

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 

public class MainActivity extends ActionBarActivity { 
ArrayList<String> listItems=new ArrayList<>(); 
ArrayAdapter<String> adapter; 
Spinner sp; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    sp=(Spinner)findViewById(R.id.spinner); 
    adapter=new ArrayAdapter<String>  (this,R.layout.spinner_layout,R.id.txt,listItems); 
    sp.setAdapter(adapter); 

} 
public void onStart(){ 
    super.onStart(); 
    BackTask bt=new BackTask(); 
    bt.execute(); 
} 
private class BackTask extends AsyncTask<Void,Void,Void> { 
    ArrayList<String> list; 
    protected void onPreExecute(){ 
     super.onPreExecute(); 
     list=new ArrayList<>(); 
    } 
    protected Void doInBackground(Void...params){ 
     InputStream is=null; 
     String result=""; 
     try{ 
      HttpClient httpclient=new DefaultHttpClient(); 
      HttpPost httppost= new HttpPost("http://10.1.1.57/localhost/getPatientsInfo.php"); 
      HttpResponse response=httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      // Get our response as a String. 
      is = entity.getContent(); 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } 

     //convert response to string 
     try{ 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8")); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       result+=line; 
      } 
      is.close(); 
      //result=sb.toString(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     // parse json data 
     try{ 
      JSONArray jArray =new JSONArray(result); 
      for(int i=0;i<jArray.length();i++){ 
       JSONObject jsonObject=jArray.getJSONObject(i); 
       // add interviewee name to arraylist 
       list.add(jsonObject.getString("NAME")); 
      } 
     } 
     catch(JSONException e){ 
      e.printStackTrace(); 
     } 
     return null; 
    } 
    protected void onPostExecute(Void result){ 
     listItems.addAll(list); 
     adapter.notifyDataSetChanged(); 
    } 
} 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.example.qi.listview.MainActivity"> 

<Spinner 
    android:id="@+id/spinner" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
</Spinner> 

spinner_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:id="@+id/txt" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    /> 

</LinearLayout> 
ありがとう

AndroidManifest.xmlを

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.qi.listview"> 

<uses-permission android:name="android.permission.INTERNET" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

enter image description here

+1

あなたのリストの0の薄いサイズのToast iのチェックリスト –

答えて

1

あなたの非同期タスクでエラーが発生しているが、あなたはタスク

ArrayList<String> list; // !? 

でローカル持っていますが、タスクにこのリストを返すと、それを割り当てる必要があります。

private class BackTask extends AsyncTask<Void,Void,List<String>> { 

protected List<String> doInBackground(Void...params){ 

とdoInBackgroundで:

return list; 

とonPostExecuteで:

protected void onPostExecute(List<String> result){ 
    listItems.addAll(result); 
    adapter.notifyDataSetChanged(); 
} 

は理にかなっていますか? ))

+0

あなたの推薦に従ってコードを変更しようとしましたが、まだ動作しません...他のアドバイスはありますか? – Robert

+0

listItems.addAll(結果)で実行されたポストでデバッガを停止したとき。結果にデータが含まれていますか? –

+0

私は初心者のプログラマーですが、上記のようにどうやってやっていますか? – Robert

関連する問題