Что о создании класса, который соответствовал JSON, который вы пытаетесь отправить и положить ArrayList<String>
на нем, то вы используете парсер JSON, как Gson и использовать StringEntity
для отправки запроса на почту, вот пример:
public class JsonTest extends AsyncTask<GoogleCalendarJson, Void, String> {
private HttpClient client;
private HttpPost request;
private HttpResponse response;
private Activity activity;
public JsonTest(Activity a){
activity = a;
}
@Override
public String doInBackground(GoogleCalendarJson... object){
client = new DefaultHttpClient();
request = new HttpPost("YOUR URL HERE");
StringBuffer b = new StringBuffer("");
String json = new Gson().toJson(object[0]);
InputStream is = null;
BufferedReader br = null;
try{
StringEntity se = new StringEntity(json);
request.setHeader(HTTP.CONTENT_TYPE, "application/json");
request.setEntity(se);
response = client.execute(request);
is = response.getEntity().getContent();
br = new BufferedReader(new InputStreamReader(is));
String line = null;
while(((line = br.readLine()) != null)){
b.append(line);
}
br.close();
}catch(IOException e){
b.append(e.getMessage());
}
return b.toString();
}
@Override
public void onPostExecute(final String result){
activity.runOnUiThread(new Runnable(){
@Override
public void run(){
TextView t = (TextView)activity.findViewById(R.id.result);
t.setText(result);
}
});
}
}
configuration
является plain old java object
и у него не было ссылки на другой configuration
объект, configuration
может иметь ArrayList<String>
, я не уверен, если бы у вас мог быть ArrayList<Item>
на нем вы могли бы попробовать, в качестве плюса можно было бы использовать HttpURLConnection вместо HttpClient от apache, если вы программируете приложение post-gingerbread вот WHY
http://android-developers.blogspot.com/2011/09/androids-http-clients.html, надеюсь, что это будет полезно для всех. PD: Я не использовал IDE для кода ниже, извините, если получил ошибки (у меня нет Android Studio @home к моменту, я отформатировал этот код с netbeans: p).
EDIT: просто для уточнения, этот AsyncTask должен быть запущен в потоке пользовательского интерфейса (скажем, в деятельности), как это:
JsonTest test = new JsonTest(this); //here we pass the Activity
test.execute(new GoogleCalendarJson()); //this is the object we get in 'object0]'
EDIT 2: новый код на самом деле работает отлично позвольте мне сказать вам пример из GoogleCalendarJson класса:
GoogleCalendarJson класса (должны иметь геттеры/сеттеры):
public class GoogleCalendarJson {
private String timeMin, timeMax, timezone;
private int groupExpanxionMaxm, calendarExpansionMax;
private ArrayList<Item> items;
public GoogleCalendarJson() {
}
}
класса Item (то же самое с г/с):
public class Item {
private String id;
public Item() {
}
}
Json Пример Сформирован с Gson:
{"timezone":"someTimezone","timeMin":"min","items":
[{"id":"someID"}],"timeMax":"max","groupExpanxionMaxm":2,"calendarExpansionMax":1}
проверить структуру JSon вы можете вставить JSON выше здесь JsonValidator для тестирования этого кода вам нужно активность, которая имеет по крайней мере TextView с идентификатором : result
Хм, это приближается, это точно. Не 100%, что это будет работать. Я обновил свой вопрос, чтобы упростить свой код, и уточнить, что я делаю. Я буду играть с вашей теорией –
Я отредактировал свое сообщение, чтобы включить материал, который вы должны изменить, также в настройках вашего запроса, и вам нужно включить «Content Length». Я не уверен, что HTTP-запрос java сделает это за вас. GL! – progrenhard
@progenhard: «Не знаю, правильно ли это для java, но в C вы просто подключите другой json к нему, чтобы создать сложный json». json не зависит от языка, поэтому да, это можно сделать независимо от того, какой язык программирования мы используем. – JosephChilberry