как отправлять данные JSON с Android на php url?

Я хочу отправить информацию о входах из моего приложения в php url.as, это мое приложение будет crash.can любой поможет мне slove это.

это мой метод входа в сервер. Я хочу отправить данные этому методу входа.

Method [ public method login ] { - Parameters [3] { Parameter #0 [ $user_auth ] Parameter #1 [ $application ] Parameter #2 [ $name_value_list = Array ] } } 

это мой login.java в приложении для Android

 public class Login extends ActionBarActivity implements View.OnClickListener { EditText userName, pass; Button login; private ProgressDialog pDialog; JSONParser jsonParser = new JSONParser(); private static final String LOGIN_URL = "http://crm.demo.com/service/v4_1/rest.php/login"; private static final String TAG_SUCCESS = "sucess"; private static final String TAG_MESSAGE = "message"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); userName = (EditText) findViewById(R.id.editText_userN); pass = (EditText) findViewById(R.id.editText_pass); login = (Button) findViewById(R.id.btn_login); login.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub Log.d("v", "Login button clicked"); new AttemptLogin().execute(); } class AttemptLogin extends AsyncTask<String, String, String>{ @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(Login.this); pDialog.setMessage("Attempting login.."); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); pDialog.dismiss(); } @Override protected String doInBackground(String... args) { // Check for success tag int success; String user_auth[]; String user_name = userName.getText().toString(); String password = pass.getText().toString(); String application = "wakensys"; String name_value_list[]; String language = "en-au"; String notifyonsave = "true"; try { // Building Parameters List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("user_auth[]", user_name)); params.add(new BasicNameValuePair("user_auth[]", password)); params.add(new BasicNameValuePair("application", application)); params.add(new BasicNameValuePair("name_value_list[]", language)); params.add(new BasicNameValuePair("name_value_list[]", notifyonsave)); Log.d("request!", "starting.."); Log.i("NameValuePair", params.toString()); // getting product details by making HTTP request JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL, "POST", params); if(json == null) return null; // check your log for json response Log.d("Login attempt", json.toString()); // json success tag success = json.getInt(TAG_SUCCESS); if (success == 1) { Log.d("Login Successful!", json.toString()); Intent i = new Intent(Login.this, Success.class); finish(); startActivity(i); return json.getString(TAG_MESSAGE); }else{ Log.d("Login Failure!", json.getString(TAG_MESSAGE)); return json.getString(TAG_MESSAGE); } } catch (JSONException e) { e.printStackTrace(); } return null; } /** * After completing background task Dismiss the progress dialog * **/ protected void onPostExecute(String file_url) { // dismiss the dialog once product deleted pDialog.dismiss(); if (file_url != null){ Toast.makeText(Login.this, file_url, Toast.LENGTH_LONG).show(); } } } } 

–new logcat —

 11-21 10:33:34.467: D/v(4400): Login button clicked 11-21 10:33:34.496: D/request!(4400): starting.. 11-21 10:33:34.496: I/NameValuePair(4400): [user_auth=dghj, user_auth=ccbj, name_value_list=EN] 11-21 10:33:36.528: E/JSON Parser(4400): Error parsing data org.json.JSONException: Value <pre> of type java.lang.String cannot be converted to JSONObject 11-21 10:33:36.531: E/AndroidRuntime(4400): FATAL EXCEPTION: AsyncTask #1 11-21 10:33:36.531: E/AndroidRuntime(4400): Process: com.wakensys.sugercrm, PID: 4400 11-21 10:33:36.531: E/AndroidRuntime(4400): java.lang.RuntimeException: An error occured while executing doInBackground() 11-21 10:33:36.531: E/AndroidRuntime(4400): at android.os.AsyncTask$3.done(AsyncTask.java:300) 11-21 10:33:36.531: E/AndroidRuntime(4400): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 11-21 10:33:36.531: E/AndroidRuntime(4400): at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 11-21 10:33:36.531: E/AndroidRuntime(4400): at java.util.concurrent.FutureTask.run(FutureTask.java:242) 11-21 10:33:36.531: E/AndroidRuntime(4400): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 11-21 10:33:36.531: E/AndroidRuntime(4400): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 11-21 10:33:36.531: E/AndroidRuntime(4400): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 11-21 10:33:36.531: E/AndroidRuntime(4400): at java.lang.Thread.run(Thread.java:818) 11-21 10:33:36.531: E/AndroidRuntime(4400): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.toString()' on a null object reference 11-21 10:33:36.531: E/AndroidRuntime(4400): at com.wakensys.sugercrm.Login$AttemptLogin.doInBackground(Login.java:116) 11-21 10:33:36.531: E/AndroidRuntime(4400): at com.wakensys.sugercrm.Login$AttemptLogin.doInBackground(Login.java:1) 11-21 10:33:36.531: E/AndroidRuntime(4400): at android.os.AsyncTask$2.call(AsyncTask.java:288) 11-21 10:33:36.531: E/AndroidRuntime(4400): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 11-21 10:33:36.531: E/AndroidRuntime(4400): ... 4 more 

Любая помощь, пожалуйста!

JOSONparser.java

 public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String json = ""; // constructor public JSONParser() { } public JSONObject getJSONFromUrl(final String url) { // Making HTTP request try { // Construct the client and the HTTP request. DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); // Execute the POST request and store the response locally. HttpResponse httpResponse = httpClient.execute(httpPost); // Extract data from the response. HttpEntity httpEntity = httpResponse.getEntity(); // Open an inputStream with the data content. is = httpEntity.getContent(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { // Create a BufferedReader to parse through the inputStream. BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); // Declare a string builder to help with the parsing. StringBuilder sb = new StringBuilder(); // Declare a string to store the JSON object data in string form. String line = null; // Build the string until null. while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } // Close the input stream. is.close(); // Convert the string builder data to an actual string. json = sb.toString(); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toString()); } // Try to 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 the JSON Object. return jObj; } // function get json from url // by making HTTP POST or GET mehtod public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) { // 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)); 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 JSON String return jObj; } } 

Вы можете попробовать свой код, как это, отлично работает для меня.

 public class Login extends ActionBarActivity { EditText tv, tv2; String email; int a; String password; JSONParser jsonParser = new JSONParser(); private ProgressDialog dialog; private static String register_user = "your link here"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); tv = (EditText) findViewById(R.id.editText1); tv2 = (EditText) findViewById(R.id.editText2); } public void Login(View view) { email = tv.getText().toString().trim(); password = tv2.getText().toString(); if(TextUtils.isEmpty(email) || TextUtils.isEmpty(password)) { if(TextUtils.isEmpty(email)) { tv.setError("This field cannot be empty"); } if(TextUtils.isEmpty(password)) { tv2.setError("This field cannot be empty"); } } else { //build Params List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("email", email)); params.add(new BasicNameValuePair("password", password)); CreateNewProduct productTask = new CreateNewProduct(params); productTask.execute(); } } class CreateNewProduct extends AsyncTask<String, String, JSONObject> { List<NameValuePair> params; public CreateNewProduct(List<NameValuePair> params) { this.params = params; } protected void onPreExecute() { super.onPreExecute(); dialog = new ProgressDialog(Login.this); dialog.setMessage("We are Logging in. Please wait . . ."); dialog.setIndeterminate(false); dialog.setCancelable(false); dialog.show(); } protected JSONObject doInBackground(String... args) { JSONObject json = jsonParser.makeHttpRequest(register_user, "POST", this.params); return json; } protected void onPostExecute(JSONObject result) { dialog.dismiss(); //this assumes that the response looks like this: //{"success" : true } String message = null; try { message = result.getString("message"); } catch (JSONException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } boolean success = false; try { success = result.getBoolean("success"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } Toast.makeText(getBaseContext(), success ? "We are good to go." : "Something went wrong!", Toast.LENGTH_SHORT).show(); Toast.makeText(getBaseContext(), message, Toast.LENGTH_LONG).show(); } } } 

Теперь, согласно вашему успеху, вы можете предпринять определенные действия. Вы также можете попробовать другие комбинации выходов JSON из вашего скрипта php.

Попробуйте начать работу с onPostExecute вместо doInBackground и не нужно [] в ключах parms:

Примечание: в соответствии с отсутствием вашего журнала, в AndroidManifest.xml

 <uses-permission android:name="android.permission.INTERNET"/> 

Пример :

 class AttemptLogin extends AsyncTask<String, String, JSONObject> { @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(Login.this); pDialog.setMessage("Attempting login.."); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); } @Override protected JSONObject doInBackground(String... args) { String user_name = userName.getText().toString(); String password = pass.getText().toString(); String application = "wakensys"; String language = "en-au"; String notifyonsave = "true"; JSONObject json=null; try { // Building Parameters List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("user_auth", user_name)); params.add(new BasicNameValuePair("user_auth", password)); params.add(new BasicNameValuePair("application", application)); params.add(new BasicNameValuePair("name_value_list", language)); params.add(new BasicNameValuePair("name_value_list", notifyonsave)); Log.d("request!", "starting.."); Log.i("NameValuePair", params.toString()); // getting product details by making HTTP request json = jsonParser.makeHttpRequest(LOGIN_URL, "POST", params); // check your log for json response Log.d("Login attempt", json.toString()); // json success tag } catch (JSONException e) { e.printStackTrace(); } return json; } /** * After completing background task Dismiss the progress dialog * **/ protected void onPostExecute(JSONObject response) { // dismiss the dialog once product deleted pDialog.dismiss(); if (response != null){ Toast.makeText(Login.this, response.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show(); if (response.getInt(TAG_SUCCESS) == 1) { Log.d("Login Successful!", response.toString()); Intent i = new Intent(Login.this, Success.class); startActivity(i); finish(); }else{ Log.d("Login Failure!", response.getString(TAG_MESSAGE)); } } } } 
 class AttemptLogin extends AsyncTask<String, String, JSONObject> { @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(Login.this); pDialog.setMessage("Attempting login.."); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); } @Override protected JSONObject doInBackground(String... args) { String user_name = userName.getText().toString(); String password = pass.getText().toString(); String application = "wakensys"; String language = "en-au"; String notifyonsave = "true"; try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(LOGIN_URL+ "UserAuthentication/"); deviceId = pref.getDeviceID(context); JSONObject object = new JSONObject(); object.put("user_auth", user_name ); object.put("user_auth", password); object.put("application", application); object.put("name_value_list", language); object.put("name_value_list", notifyonsave); String dat = object.toString(); JSONObject object1 = new JSONObject(); object1.put("userAuthentication", object); String dat1 = object1.toString(); httppost.setEntity(new StringEntity(dat1, HTTP.US_ASCII)); httppost.setHeader("Content-type", "application/json;" + HTTP.UTF_8); HttpResponse response = httpclient.execute(httppost); StatusLine statusLine = response.getStatusLine(); HttpEntity entity = response.getEntity(); InputStream content = entity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader( content)); String line; StringBuilder builder = new StringBuilder(); while ((line = reader.readLine()) != null) { builder.append(line); } result = builder.toString(); } catch (JSONException e) { e.printStackTrace(); } return json; } /** * After completing background task Dismiss the progress dialog * **/ protected void onPostExecute(JSONObject response) { // dismiss the dialog once product deleted pDialog.dismiss(); if (response != null){ Toast.makeText(Login.this, response.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show(); if (response.getInt(TAG_SUCCESS) == 1) { Log.d("Login Successful!", response.toString()); Intent i = new Intent(Login.this, Success.class); startActivity(i); finish(); }else{ Log.d("Login Failure!", response.getString(TAG_MESSAGE)); } } } }