0

以前はテスト中にスピナーに String[] 配列を設定していましたが、JSON サービスからリストを取得する ArrayList を使用するように変更しました。リストは正常に表示されますが、アイテムを選択するとスピナーは表示されません (これは表示されます)。宣言された配列を使用しているだけのときに機能します。私が変更したのはリストの作成方法だけです。私はプログラミング全般とアンドロイドに慣れていないので、明らかな場合は簡単に行ってください。同じことに関する他の多くの問題を本当に調べましたこれを投稿する前にトピックとチュートリアルを確認しましたが、私の何が問題なのかを見つけることができません。

    import android.widget.*;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    import org.json.JSONArray;
    import org.json.JSONObject;

    import java.util.ArrayList;


    public class AddCall extends Activity {

    Spinner customer,jobType;
    Button getSignature;
    //String[] customerList={"Company1","Company2","Company3","Company4"};
    //String[] jobTypeList={"Service","Phone","Installation","Upgrade"};
    ArrayList<String> customerList = new ArrayList<String>();
    ArrayList<String> jobTypeList = new ArrayList<String>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.addcall);
        getCallTypes();
        getCustomers();

        //setup customer adapter
        customer =(Spinner) findViewById(R.id.spinnerCustomer);
        ArrayAdapter<String> customerAdapter = new ArrayAdapter<String>       

        (AddCall.this,R.layout.spinner_item_text,customerList);
        customer.setAdapter(customerAdapter);

        //setup jobtype adapter
        jobType =(Spinner) findViewById(R.id.spinnerJobType);
        ArrayAdapter<String> jobTypeAdapter = new ArrayAdapter<String>

        (AddCall.this,R.layout.spinner_item_text,jobTypeList);
        jobType.setAdapter(jobTypeAdapter);






        //initialise Signature button
        getSignature =(Button) findViewById(R.id.getSignature);
        getSignature.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent intent = new Intent(AddCall.this, CaptureSignature.class);
                startActivity(intent);
            }
        });



    }
    public void getCallTypes() {
        DownloadCallTypes taskCallType = new DownloadCallTypes();
        taskCallType.execute(new String[] { "http://192.168.0.14:8080/return_call_type.json" });

    }

    public void getCustomers() {
        DownloadCustomers taskCustomers = new DownloadCustomers();
        taskCustomers.execute(new String[] { "http://192.168.0.14:8080/return_customers.json" });

    }

    private class DownloadCallTypes extends AsyncTask<String, Void, ArrayList<String>> {
        @Override
        protected ArrayList<String> doInBackground(String... urls) {
            ArrayList<String> response = new ArrayList<String>();
            for (String url : urls) {
                DefaultHttpClient client = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(url);
                try {
                    HttpResponse execute = client.execute(httpGet);
                    HttpEntity entity= execute.getEntity();
                    String data = EntityUtils.toString(entity);
                    JSONArray array = new JSONArray(data);

                    for (int i = 0; i < array.length(); i++) {
                        JSONObject row = array.getJSONObject(i);

                        response.add(row.getString("call_type"));
                    }


                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return response;
        }

        @Override
        protected void onPostExecute(ArrayList<String> result) {
            String list="";
            for (int i=0;i< result.size();i++){
                list= result.get(i);
               jobTypeList.add(list);
            }
            //textView.setText(list);
        }
    }

    private class DownloadCustomers extends AsyncTask<String, Void, ArrayList<String>> {
        @Override
        protected ArrayList<String> doInBackground(String... urls) {
            ArrayList<String> response = new ArrayList<String>();
            for (String url : urls) {
                DefaultHttpClient client = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(url);
                try {
                    HttpResponse execute = client.execute(httpGet);
                    HttpEntity entity= execute.getEntity();
                    String data = EntityUtils.toString(entity);
                    JSONArray array = new JSONArray(data);

                    for (int i = 0; i < array.length(); i++) {
                        JSONObject row = array.getJSONObject(i);

                        response.add(row.getString("customer_name"));
                    }


                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return response;
        }

        @Override
        protected void onPostExecute(ArrayList<String> result) {
            String list="";
            for (int i=0;i< result.size();i++){
                list= result.get(i);
                customerList.add(list);
            }
            //textView.setText(list);
        }
    }
   }

ここに私のxmlレイアウトがあります

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:background="#92add2">
    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#fefefe" android:clickable="true" android:baselineAligned="false">
    <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView"
            android:layout_gravity="left"
            android:src="@drawable/header_image" android:adjustViewBounds="true"/>
    </LinearLayout>
        <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:weightSum="2"
        android:paddingTop="10dp">
    <TextView
            style="@style/text"
            android:gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Customer"
            android:id="@+id/tvCustomer" android:layout_weight="1"/>
    <TextView
            style="@style/text"
            android:gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Job Type"
            android:id="@+id/tvJobType" android:layout_weight="1"/>
   </LinearLayout>
    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:weightSum="2"
            android:layout_marginLeft="10dp" android:layout_marginRight="10dp">
    <Spinner
            android:layout_weight="1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/spinnerCustomer" android:clickable="true"/>
    <Spinner
            android:layout_weight="1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/spinnerJobType" android:clickable="true"/>
    </LinearLayout>
    <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:layout_margin="10dp">
        <TextView
                style="@style/text"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Address"
                android:id="@+id/tvAddress"/>
        <EditText
                style="@style/editText"
                android:layout_width="fill_parent"
                android:layout_height="120dp"
                android:text=""
                android:id="@+id/etAddress"
                android:background="@drawable/rounded_corners_white"
                />
        <TextView
                style="@style/text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Phone"
                android:id="@+id/tvPhone"/>
        <EditText
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text=""
                android:id="@+id/etPhone"
                android:background="@drawable/rounded_corners_white" android:textColor="#000000"
                android:paddingLeft="10dp"/>
        <TextView
                style="@style/text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Contact"
                android:id="@+id/tvContact"/>
        <EditText
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text=""
                android:id="@+id/etContact"
                android:background="@drawable/rounded_corners_white"/>
    </LinearLayout>
    <LinearLayout android:orientation="horizontal"
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:weightSum="4" android:layout_margin="10dp">
        <TextView
                android:layout_weight="1"
                style="@style/text"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Logged By"
                android:id="@+id/tvLoggedBy" />
        <EditText
                android:layout_weight="1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:id="@+id/etLoggedBy"
                android:background="@drawable/rounded_corners_white"
                style="@style/editText"/>
        <TextView
                android:layout_weight="1"
                style="@style/text"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Date Logged"
                android:id="@+id/tvDateLogged" android:layout_marginLeft="5dp"/>
        <EditText
                android:background="@drawable/rounded_corners_white"
                android:layout_weight="1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text=""
                android:id="@+id/editText1"
                style="@style/editText"/>
    </LinearLayout>
    <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:layout_margin="10dp">
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Call Notes"
                android:id="@+id/textView1" style="@style/text"/>
        <EditText
                android:background="@drawable/rounded_corners_white"
                android:layout_width="fill_parent"
                android:layout_height="100dp"
                android:id="@+id/etCallNotes" style="@style/editText"
                android:gravity="left|top"/>
    </LinearLayout>
    <LinearLayout
            android:weightSum="4"
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:padding="10dp">
        <Button
                style="@style/btnStyleOrange"
                android:layout_weight="1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Save"
                android:id="@+id/bSave" android:layout_gravity="center"       

               android:layout_marginRight="5dp"/>
        <Button
                android:layout_weight="1"
                style="@style/btnStyleOrange"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Close"
                android:id="@+id/bClose" android:layout_gravity="center"/>
        <CheckBox
                android:layout_weight="1"
                style="@style/text"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:text="Completed"
                android:id="@+id/checkBox"/>
        <Button
                android:layout_weight="1"
                style="@style/btnStyleOrange"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:text="Signature"
                android:id="@+id/getSignature"/>
    </LinearLayout>
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="Real Document Management"
            android:id="@+id/textView2" style="@style/text"    

            android:gravity="center_vertical|center_horizontal"
            />
    </LinearLayout>
4

1 に答える 1

0

これはAdapter、メイン スレッドで を設定しているのに、AsyncTaskまだ完了していないためです。onPostExecuteメソッドの最後に次の行を追加するだけです。

 @Override
        protected void onPostExecute(ArrayList<String> result) {
            String list="";
            for (int i=0;i< result.size();i++){
                list= result.get(i);
               jobTypeList.add(list);
            }
            //textView.setText(list);
jobTypeAdapter.notifyDataSetChanged();
        }

    @Override
    protected void onPostExecute(ArrayList<String> result) {
        String list="";
        for (int i=0;i< result.size();i++){
            list= result.get(i);
            customerList.add(list);
        }
        //textView.setText(list);
customerAdapter.notifyDataSetChanged();
    }

これは、基本的にバッキングを変更するたびに行う必要がありますArrayList

customerAdapter注: クラスで表示するには、 &jobTypeAdapterをクラス レベル変数として宣言する必要がありAsyncTaskます。

于 2013-10-20T12:25:54.757 に答える