Не могу передать массив на сервер

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
jsnola
Сообщения: 4
Зарегистрирован: 10 мар 2015, 00:42

Не могу передать массив на сервер

Сообщение jsnola » 10 мар 2015, 00:44

Здравствуйте. Хочу попробовать передать массив на сервер. К примеру список вопросов. Но в итоге имею ошибку:
E/JSON Parser(20752): Error parsing data org.json.JSONException: End of input at character 0 of
MainActivity

Код: Выделить всё

public class MainActivity extends Activity{
	private EditText et1, et2, et3; //отсюда берем текст
	private Button button1; // при нажатии отправляем
	private ArrayList<EditText> list; // тут храниться весь EditText
	private JSONArray array; // весь текст который был в EditText потом будет тут
	private static final String saveURL = "http://ksupulse.net63.net/list.php"; //ссылка с которой работаем(рабочая) 
	final Context context = this; 
	
	@Override 
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		et1 = (EditText) findViewById(R.id.editText1); //инициализация 
		et2 = (EditText) findViewById(R.id.editText2); 
		et3 = (EditText) findViewById(R.id.editText3);
		button1 = (Button) findViewById(R.id.button1);
		
		array = new JSONArray();
		list = new ArrayList<EditText>();
		
		list.add(et1); // добавляем весь EditText в ArrayList
		list.add(et2);
		list.add(et3);
		
		button1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
                //смотрим размер и добавляем весь текст с list в JSONArray
				for(int i = 0; i < list.size(); i++) {
					array.put(list.get(i).getText().toString());
				}
				//запускаем AsyncTask
				new SaveQuestions().execute();
			}
		});
	}
	
	private class SaveQuestions extends AsyncTask<String, Void, Void> {
		private ProgressDialog pDialog;
 
		protected void onPreExecute() {
	          //код
	        }
		
		@Override
		protected Void doInBackground(String... params) {
            //класс, ниже код этого класса
			JSONParser operationLink = new JSONParser();
			ArrayList<NameValuePair> save = new ArrayList<NameValuePair>();
			save.add(new BasicNameValuePair("listArrayQuestions", array.toString()));
			
            //для проверки сделал тут цикл в array хранятся значения, все выводит
			for(int s = 0; s < array.length(); s++){
				Log.e("listArrayQuestions" + array, "listArrayQuestions");
			}	
			
			try{
                 //передаем
				operationLink.makeHttpRequest(saveURL, "POST", save);
			}catch(Exception e){Log.e("Exception " + e, "excetion");}
			return null;
		}
		
		protected void onPostExecute(Void s) {
			 //код
		 }	
	}
}
JSONParser

Код: Выделить всё

public class JSONParser {
 
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";
 
    // constructor
    public JSONParser() {
 
    }
 
    // function get json from url
    // by making HTTP POST or GET mehtod
    public JSONObject makeHttpRequest(String url, String method,
            List<NameValuePair> params) throws JSONException {
 
        // Making HTTP request
        try {
 
            // check for request method
            if(method == "POST"){
                // request method is POST
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
 
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
 
            }else if(method == "GET"){
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);
 
                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            }           
 
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
 
        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
 
        return jObj; 
 
    }
}
list.php

Код: Выделить всё

<?php
	header('Content-Type: application/json; charset=UTF-8'); 
    require 'db_connect.php'; 
    $db = new DB_CONNECT(); 
 
    $response = array();
    $response["qwestions"] = array();
       
    if(isset($_POST['listArrayQuestions'])) {
        $listArray = $_POST['listArrayQuestions'];
        $list = json_decode($listArray, true);
        
        foreach ($list as $name) {
            $result = mysql_query("INSERT INTO `test`(`text`) VALUES ('".$name."')") or die(mysql_error());
        }
 
        $response["success"] = 1;
        echo json_encode($response);  
    } else {
        $response["success"] = 0;
        echo json_encode($response);   
    }
?>

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Не могу передать массив на сервер

Сообщение doter.ua » 10 мар 2015, 11:38

Чет стремные костыли, собирать коллекцию из Едит текстов, когда можно сразу положить туда строки. В общем посоветую либу GSON от гугла.
https://sites.google.com/site/gson/gson ... y-Examples
Подключать можно в гредле

Код: Выделить всё

dependencies {

    compile 'com.google.code.gson:gson:2.3.1'

}
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

jsnola
Сообщения: 4
Зарегистрирован: 10 мар 2015, 00:42

Re: Не могу передать массив на сервер

Сообщение jsnola » 10 мар 2015, 13:30

Коллекция из едит тектов мне нужна, т.к она потом будет создаваться динамически.
Спасибо за совет. Я использовал gson но ошибки остались:
E/Buffer Error(7404): Error converting result java.lang.NullPointerException
E/JSON Parser(7404): Error parsing data org.json.JSONException: End of input at character 0 of
Вот что поменял в коде:

Код: Выделить всё

public class MainActivity extends Activity{
   //////
   Gson gson = new Gson();
   String json;
   //////

   protected void onCreate(Bundle savedInstanceState) {
    ///////////
    //////////
    button1.setOnClickListener(new OnClickListener() {
      for(int i = 0; i < list.size(); i++) {
	    array.put(list.get(i).getText().toString());
	}
	json = gson.toJson(array);
	new SaveQuestions().execute(new String[]{json});
      }
    }

private class SaveQuestions extends AsyncTask<String, Void, Void> {
/////////////////
///////////////
save.add(new BasicNameValuePair("listArrayQuestions", params[0]));
//////////
/////////////
}
}

Ответить