0

チェックボックスを使用して名前のリストを表示する Android アプリケーションがあります。チェックしたアイテムとチェックしていないアイテムをデータベースに保存したい。電話にデータ項目を永続的に保存したくありません。データ (チェック済みおよび未チェック) を電話に一時的に保存し、Web サービス経由でデータベースに転送できるメカニズムが必要です。

誰でもこれを行う方法を教えてもらえますか? 現在のコードにどのような変更を加える必要がありますか?

リストを表示する私のAndroidコードは次のとおりです。

      package com.demo;

      import java.io.IOException;
      import java.io.UnsupportedEncodingException;
      import java.net.SocketException;
      import java.util.ArrayList;
      import java.util.List;
      import org.apache.http.NameValuePair;
      import android.app.Activity;
      import android.app.AlertDialog;
      import an droid.content.DialogInterface;
      import android.os.Bundle;
      import android.util.Log;
      import android.widget.TextView;
      import org.apache.http.client.entity.UrlEncodedFormEntity; 
      import org.apache.http.HttpEntity;
      import org.apache.http.HttpResponse;
      import org.apache.http.client.ClientProtocolException;
      import org.apache.http.client.HttpClient;
      import org.apache.http.client.methods.HttpPost;
      import org.apache.http.impl.client.DefaultHttpClient;
      import org.apache.http.message.BasicNameValuePair;
      import org.apache.http.protocol.HTTP;
      import org.json.JSONArray;
      import org.json.JSONException;
      import org.json.JSONObject;
      import org.ksoap2.SoapEnvelope;
      import org.ksoap2.serialization.SoapObject;
      import org.ksoap2.serialization.SoapPrimitive;
      import org.ksoap2.serialization.SoapSerializationEnvelope;
      import org.ksoap2.transport.HttpTransportSE;



 public class TestApp extends Activity {

private static final String SOAP_ACTION = "http://tempuri.org/getData";

    private static final String METHOD_NAME = "getData";

    private static final String NAMESPACE = "http://tempuri.org/";
    private static final String URL = "http://10.0.2.2/getdata2/Service1.asmx";
    TextView tv;

boolean[] bln1=null; 

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    tv=(TextView)findViewById(R.id.text1);

           String[] arr2= call();


           boolean[] bln=new boolean[arr2.length];
    for(int i=0;i<arr2.length;i++)
   {  
        bln[i]=false;

    }  

   bln1 = new boolean[arr2.length];

    new AlertDialog.Builder(TestApp.this)
    .setIcon(R.drawable.alert_dialog_icon)
    .setTitle("Title")
    .setMultiChoiceItems(arr2,
            bln,
            new DialogInterface.OnMultiChoiceClickListener() {
                public void onClick(DialogInterface dialog, int whichButton,
                        boolean isChecked) {

                                        if(isChecked){
                                    bln1[whichButton] = true;
                                           }
                    else{
                        bln1[whichButton] = false;
                    }
                }
            })
    .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {

            JSONObject jsonObject = new JSONObject();
            String[] arr2=call();
            for(int i=0;i<arr2.length;i++)
                try {
                    jsonObject.put("key"+i,arr2[i]);
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            JSONArray jArrayParam = new JSONArray();
            jArrayParam.put(jsonObject);

            List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
            nameValuePair.add(new BasicNameValuePair("bulkdata",
                    jArrayParam.toString()));

            Log.e("bulkdata", jArrayParam.toString());

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://10.0.2.2/login2/Service1.asmx");//web service to send data to to forward to database

        httppost.addHeader("Content-Type", "application/x-www-form-urlencoded");
        try {
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePair,  HTTP.UTF_8));
        } catch (UnsupportedEncodingException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        // Execute HTTP Post Request

        try {
            HttpResponse response=null;
            response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            Log.e("entity:",entity.toString());
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // get response entity

        }
    })
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {


        }
    })
   .show();


}


public String[] call()
{
    SoapPrimitive responsesData = null; 

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( 
    SoapEnvelope.VER11); 
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(request);

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    androidHttpTransport.debug = true; 

    try {

    androidHttpTransport.call(SOAP_ACTION, envelope);

    responsesData = (SoapPrimitive) envelope.getResponse(); 
    System.out.println(" --- response ---- " + responsesData); 

    } catch (SocketException ex) { 
    ex.printStackTrace(); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
    System.out.println( " ----" + responsesData );

    String serviceResponse= responsesData .toString(); 


    String[] temp; 
    String delimiter = "#"; 
    temp= serviceResponse.split(delimiter);
    System.out.println( " ---- length ---- " + temp.length); 

    return temp; 

                }

         } 

今までの私のアウトプット

4

1 に答える 1

1

エラーは .setPositiveButton() メソッドの String[] arr2=call() 行にあると思います。

onCreate メソッドで行ったように、Web サービスからデータを再度読み取り、それを json の結果に入れるのはなぜですか?

元のデータの代わりに、json の結果のチェックボックスのステータスを入れるべきではありませんか?

于 2011-10-25T12:53:39.487 に答える