获取错误Json数组无法转换为json对象

时间:2016-09-14 06:56:15

标签: php arrays json

我必须将json数组发送到Web服务器。我从数组列表创建了json数组。我有一个帮助类,它将json对象发送到服务器。

所以我想将json数组转换为json对象。

我试着这样做:

public class SendMultipleInvitesAsyncTask extends AsyncTask<ArrayList<Invitation>, Void, JSONObject> {

private Context context;
JSONArray array = new JSONArray();

public SendMultipleInvitesAsyncTask(Context context)
{

    this.context = context;

}

    @Override
    protected JSONObject doInBackground(ArrayList<Invitation>... params) {
        try {
            String api = context.getResources().getString(R.string.server_url) + "contactsapi/sendInvite.php";

            JSONArray jsArray = new JSONArray(params);

                JSONObject jsonObject = jsArray.getJSONObject(0);

                ServerRequest request = new ServerRequest(api, jsonObject);
                return request.sendRequest();


        } catch(JSONException je) {
            return Excpetion2JSON.getJSON(je);
        }
    }

但是由于json数组无法转换为json对象,我收到错误。

的活动:

public class SendMultipleInvites extends AppCompatActivity {

private ArrayList<Invitation> invitationArrayList;


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

  invitationArrayList = new ArrayList<>();

    Invitation invitation = new Invitation("3","17/02/2016","55165122","1","user10");

    invitationArrayList.add(invitation);

    invitation = new Invitation("3","17/02/2016","282751221","1","user10");

    invitationArrayList.add(invitation);

   // JSONArray jsArray = new JSONArray(invitationArrayList);

    new SendMultipleInvitesAsyncTask(SendMultipleInvites.this).execute(invitationArrayList);

}

}

助手类:

public class ServerRequest {
String api;
JSONObject jsonParams;

public ServerRequest(String api, JSONObject jsonParams) {
    this.api = api;
    this.jsonParams = jsonParams;
}


public JSONObject sendRequest() {
    try {
        URL url = new URL(api);
        HttpURLConnection con = (HttpURLConnection)url.openConnection();
        con.setRequestMethod("POST");
        con.setRequestProperty("Content-Type", "application/json");
        con.setDoOutput(true);
        con.setDoInput(true);
        OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream());
        writer.write(jsonParams.toString());
        writer.close();

        int responseCode = con.getResponseCode();
        if  (responseCode == HttpURLConnection.HTTP_OK) {
            StringBuilder sb = new StringBuilder();
            BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String line = "";
            while ( (line = reader.readLine()) != null ){
                sb.append(line);
            }
            reader.close();
            Log.d("ServerResponse", new String(sb));
            return new JSONObject(new String(sb));
        } else {
            throw new UnexpectedServerException("Unexpected server exception with status code : "+responseCode);
        }
    } catch (MalformedURLException me) {
        me.printStackTrace();
        return Excpetion2JSON.getJSON(me);
    } catch(IOException ioe) {
        ioe.printStackTrace();
        return Excpetion2JSON.getJSON(ioe);
    } catch(UnexpectedServerException ue) {
        ue.printStackTrace();
        return Excpetion2JSON.getJSON(ue);
    } catch (JSONException je) {
        je.printStackTrace();
        return Excpetion2JSON.getJSON(je);
    }
}

编辑:

输入我想要的json数组:

 {
"invitations": [
    {

    "date" : "12/08/2016",
    "invitee_no" : "196756456",
    "status" : "1",
    "user_name" : "user10"

    },
    {

    "date" : "12/08/2016",
    "invitee_no" : "13633469",
    "status" : "1",
    "user_id" : "user9"

    }
  ]

}

编辑:

我试着这样做:

的AsyncTask:

public class SendMultipleInvitesAsyncTask extends AsyncTask<String, Void, JSONObject> {

private Context context;
JSONArray array = new JSONArray();

public SendMultipleInvitesAsyncTask(Context context)
{

    this.context = context;

}

    @Override
    protected JSONObject doInBackground(String... params) {
        try {
            String api = context.getResources().getString(R.string.server_url) + "contactsapi/sendMultipleInvite.php";

            JSONObject obj = new JSONObject(params[0]);

            ServerRequest request = new ServerRequest(api,obj);
            return request.sendRequest();


        } catch(JSONException je) {
            return Excpetion2JSON.getJSON(je);
        }
    }

的活动:

public class SendMultipleInvites extends AppCompatActivity {

    private ArrayList<Invitation> invitationArrayList;


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

      invitationArrayList = new ArrayList<>();

        Invitation invitation = new Invitation("3","17/02/2016","55165122","1","user10");

        invitationArrayList.add(invitation);

        invitation = new Invitation("3","17/02/2016","282751221","1","user10");

        invitationArrayList.add(invitation);

       // JSONArray jsArray = new JSONArray(invitationArrayList);


        Gson gson=new Gson();
        String toServer=gson.toJson(invitationArrayList);

        new SendMultipleInvitesAsyncTask(SendMultipleInvites.this).execute(toServer);

它仍然给出错误json数组无法转换为json对象。

如何将json数组发送到Web服务器?任何人都可以帮忙,谢谢你..

1 个答案:

答案 0 :(得分:0)

首先需要在依赖项中添加Gson lib,然后为该gson创建对象,如:

Gson gson=new Gson();
String toServer=gson.toJson(invitationArrayList);

将asynctask参数更改为string并在execute方法中传递此字符串。