0

jsonを使用してüをサーバーに送信する際に問題が発生しました。私はサーバー上に何か間違っている良い広告をすべて実装していると思います。これはコードです:

public void sendMail(List<String> addresses, String title, String contents, boolean addVcard){
        JSONObject args = new JSONObject();
        HashMap<Long, ArrayList<Long>> pdfs = new HashMap<Long, ArrayList<Long>>();
        if(list == null)
            list = (EmailListFragment)getSupportFragmentManager().findFragmentById(R.id.list_fragment);
        if(list == null)
            list = (EmailListFragment)getSupportFragmentManager().findFragmentByTag(LIST_FRAGMENT);
        if(list != null){
            for(TreeFile pdf: list.getPDFs()){

                if(pdf.type == FilesLoader.PAGE){
                    ArrayList<Long> pages = pdfs.get(pdf.parent);
                    if(pages == null){
                        pages = new ArrayList<Long>();
                        pdfs.put(pdf.parent, pages);
                    }
                    pages.add(pdf.id);
                }else if(pdf.type == FilesLoader.PDF){
                    if(pdfs.get(pdf.id) == null)
                        pdfs.put(pdf.id, new ArrayList<Long>());
                }
            }
        }
        try {
            args.put("emails", new JSONArray(addresses));
            Iterator<Entry<Long, ArrayList<Long>>> it = pdfs.entrySet().iterator();
            JSONObject pdfsArgs = new JSONObject();
                // attachment added by user

            while (it.hasNext()) {
                Entry<Long, ArrayList<Long>> pairs = it.next();
                JSONArray pages = new JSONArray();

                // sorting pages by id
                ArrayList<Long> pageList = (ArrayList<Long>)pairs.getValue();
                Collections.sort(pageList);

                for(Long id: pageList){
                    pages.put(id+"");
                }
                if(pages.length() > 0)
                    pdfsArgs.put(pairs.getKey() + "", pages);
                it.remove(); // avoids a ConcurrentModificationException
            }
            args.put("magazines", pdfsArgs);
//          String mes = null;
//          try {
//              mes = URLEncoder.encode(contents, "CP1252");
//          } catch (UnsupportedEncodingException e) {
//              // TODO Auto-generated catch block
//              e.printStackTrace();
//          }
            args.put("message", contents);
            args.put("subject", title);
            if(getvca.emailPref != null && getvca.emailPref.length() > 0
                    && getvca.emailPref.matches("[a-zA-Z0-9._@+,; \\-]+"))
                args.put("sender", getvca.emailPref);
            else
                args.put("sender", GlobalConfig.getUser());

            if(addVcard){
                args.put("vcard", "1");
                getvca.addTo(args);
            }else{
                args.put("vcard", "0");
            }



        } catch (JSONException e) {
            MY_DEBUG.print(e);
        }

        postData = new SendPostData();
        postData.execute(args);
    }



    private class SendPostData extends AsyncTask<JSONObject, String, Long> {
        ByteArrayOutputStream out;
         @Override
        protected Long doInBackground(JSONObject... objects) {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(GlobalConfig.getSendEmail());

            httppost.addHeader("Authorization", "Basic " + Base64.encodeToString(
                    (GlobalConfig.getAuthString()).getBytes(),Base64.NO_WRAP));
            httppost.addHeader("Accept-Encoding", "CP1252");
            httppost.addHeader("Accept-Encoding", "UTF-8");
            try {
                MY_DEBUG.print(objects[0].toString(4));
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                nameValuePairs.add(new BasicNameValuePair("data", objects[0].toString()));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                // Execute HTTP Post Request
                HttpResponse response = httpclient.execute(httppost);
                out = new ByteArrayOutputStream();
                response.getEntity().writeTo(out);
                out.close();

                publishProgress(out.toString());
                setOut(out);
                MY_DEBUG.LOG(getClass(), "Email server response: " + out.toString());
                if(out != null && out.toString().contains("0"))
                    return (long) 0;
                else
                    return (long) 1;
            } catch (ClientProtocolException e) {
                MY_DEBUG.print(e);
            } catch (IOException e) {
                MY_DEBUG.print(e);
            } catch (JSONException e) {
                MY_DEBUG.print(e);
            }

            Long startPosition = (long) 1;
            return startPosition;
         }
        public void setOut(ByteArrayOutputStream out) {
            this.out = out;
        }

        @Override
        protected void onProgressUpdate(String... progress) {
//             if(progress[0].contains("0")){
         }

ログには次のように表示されます。

01-16 13:12:42.167: E/ASDASD(27672): {
01-16 13:12:42.167: E/ASDASD(27672):     "position": "",
01-16 13:12:42.167: E/ASDASD(27672):     "phone": "",
01-16 13:12:42.167: E/ASDASD(27672):     "fax": "",
01-16 13:12:42.167: E/ASDASD(27672):     "subject": "",
01-16 13:12:42.167: E/ASDASD(27672):     "surname": "",
01-16 13:12:42.167: E/ASDASD(27672):     "firstname": "",
01-16 13:12:42.167: E/ASDASD(27672):     "emails": [
01-16 13:12:42.167: E/ASDASD(27672):         "test@test.pl"
01-16 13:12:42.167: E/ASDASD(27672):     ],
01-16 13:12:42.167: E/ASDASD(27672):     "vcard": "1",
01-16 13:12:42.167: E/ASDASD(27672):     "sender": "ediusz@gmail.com",
01-16 13:12:42.167: E/ASDASD(27672):     "message": "ü",
01-16 13:12:42.167: E/ASDASD(27672):     "email": "ediusz@gmail.com",
01-16 13:12:42.167: E/ASDASD(27672):     "company": "",
01-16 13:12:42.167: E/ASDASD(27672):     "magazines": {
01-16 13:12:42.167: E/ASDASD(27672):         "90": [
01-16 13:12:42.167: E/ASDASD(27672):             "1",
01-16 13:12:42.167: E/ASDASD(27672):             "2",
01-16 13:12:42.167: E/ASDASD(27672):             "3"
01-16 13:12:42.167: E/ASDASD(27672):         ]
01-16 13:12:42.167: E/ASDASD(27672):     },
01-16 13:12:42.167: E/ASDASD(27672):     "internet": "",
01-16 13:12:42.167: E/ASDASD(27672):     "mobile": ""
01-16 13:12:42.167: E/ASDASD(27672): }

だから私はすべてが大丈夫だと思いますが、サーバーは私にエラーを返します。サーバーにアクセスできません。あれについてどう思う?

4

1 に答える 1

1

サーバーが使用しているエンコーディング(おそらく/できればUTF-8)を確認し、コンテンツを使用済みのエンコーディングから正しい(サーバー)エンコーディングに変換する必要があります。

contents = new String(contents.getBytes("ISO-8859-1"), "UTF-8");

注:すべてのデータに対してこれを行う必要があります。

間違ったエンコーディングを使用すると、(実際には)サーバーからエラーが発生する可能性があります。

于 2013-01-16T12:19:50.217 に答える