问题
I am going to develop a web application for android but I am trying first time ever this experiment so i am not able to complete my task because I am new in it. Its giving me an error like string cannot convert to JSONObject. please please help me I've tried everything upto me but could not get any solution yet. Here is my code.
public class signup extends Activity implements OnClickListener {
Button signup,cancel;
EditText e1,e2,e3,e4;
String name;
String email;
String mobile;
String passwd;
InputStream is=null;
String result=null;
String line=null;
int code;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.signupfrag);
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
signup=(Button)findViewById(R.id.reg);
cancel=(Button)findViewById(R.id.regcancel);
e1=(EditText)findViewById(R.id.name);
e2=(EditText)findViewById(R.id.uid);
e3=(EditText)findViewById(R.id.contact);
e4=(EditText)findViewById(R.id.passwd);
signup.setOnClickListener(this);
cancel.setOnClickListener(this);
}
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId()==R.id.reg)
{
name = e1.getText().toString();
email = e2.getText().toString();
mobile = e3.getText().toString();
passwd = e4.getText().toString();
insert();
Intent i=new Intent(signup.this,MainActivity.class);
startActivity(i);
}
if(v.getId()==R.id.regcancel)
{
e1.setText(null);
e2.setText(null);
e3.setText(null);
e4.setText(null);
}
}
private void insert() {
// TODO Auto-generated method stub
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("fname",name));
nameValuePairs.add(new BasicNameValuePair("email",email));
nameValuePairs.add(new BasicNameValuePair("mobile",mobile));
nameValuePairs.add(new BasicNameValuePair("passwd",passwd));
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://192.168.43.73/htdocs/insert1.php");//10.0.2.2
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("pass 1", "connection success ");
}
catch(Exception e)
{
Log.e("Fail 1", e.toString());
Toast.makeText(getApplicationContext(), "Invalid IP Address",
Toast.LENGTH_LONG).show();
}
try
{
BufferedReader reader = new BufferedReader
(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
is.close();
result = sb.toString();
Log.e("pass 2", "connection success ");
}
catch(Exception e)
{
Log.e("Fail 2", e.toString());
}
try
{
JSONObject json_data = new JSONObject(result);
code=(json_data.getInt("code"));
if(code==1)
{
Toast.makeText(getBaseContext(), "Inserted Successfully",
Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getBaseContext(), "Sorry, Try Again",
Toast.LENGTH_LONG).show();
}
}
catch(Exception e)
{
Log.e("log_tag", "Error parsing data "+e.toString());
Log.e("log_tag", "Failed data was:\n" + result);
Log.e("Fail 3", e.toString());
}
}
}
and this is my php code
<?php
$host='127.0.0.1';
$uname='root';
$pwd='password';
$db="resumemaker";
$con = mysql_connect("localhost", "root");
mysql_select_db($db,$con) or die("db selection failed");
$fname=$_REQUEST['fname'];
$email=$_REQUEST['email'];
$mobile=$_REQUEST['mobile'];
$passwd=$_REQUEST['passwd'];
$flag['code']=0;
if($r=mysql_query("insert into sample values('$fname','$email','$mobile','$passwd') ",$con))
{
$flag['code']=1;
//echo"hi";
}
print(json_encode($flag));
mysql_close($con);
?>
Thanks In Advance....
回答1:
Your are not encoding it into json see this example will help you its 100% percent working code
Index.php
<?php
header("Content-Type:application/json");
include("function.php");
$fname=$_REQUEST['fname'];
$email=$_REQUEST['email'];
$mobile=$_REQUEST['mobile'];
$passwd=$_REQUEST['passwd'];
$record = fetchrecord($fname,$email,$mobile,$passwd);
if(empty($record))
{
deliverresponse(200,"Record not found",NULL,0);
}
else
{
deliverresponse(200,"Record Displayed",$record,1);
}
function deliverresponse($status,$status_message,$data,$success)
{
header("HTTP/1.1 $status $status_message");
$response['status'] = $status;
$response['status_message'] = $status_message;
$response['code'] = $code;
$response['data'] = $data;
$jsonresponse = json_encode($response);
echo $jsonresponse;
}
?>
Function.php
<?php
$conn = mysql_connect("localhost", "root", "");
mysql_select_db('your db name', $conn);
function fetchrecord($fname,$email,$mobile,$passwd)
{
$qur = mysql_query("INSERT INTO `sample` (fname,email,mobile,passwd) VALUES (NULL, '$fname','$email','$mobile','$passwd')") or die ("Query Failed");
if($qur)
{
$msg = "Record Inserted";
$user[] = array($msg);
}
else
{
$msg = "Record not Inserted";
$user[] = array($msg);
}
return $user;
}
use Async Class for net threading
public class SignupProcess extends AsyncTask<String, String, String>
{
JSONObject json = new JSONObject();
private static final String TAG_SUCCESS = "code";
@Override
protected void onPreExecute() {
pDialog = new ProgressDialog(signup.this);
pDialog.setMessage("Login..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
super.onPreExecute();
}
@Override
protected String doInBackground(String... args) {
List<NameValuePair> pair = new ArrayList<>();
pair.add(new BasicNameValuePair("name", name));
pair.add(new BasicNameValuePair("email", email));
pair.add(new BasicNameValuePair("password", mobile));
pair.add(new BasicNameValuePair("status",String,psswd);
json = JSONParser.makeHttpRequest("http://xxxxxxx","GET", pair);
Log.d("Create Response", json.toString());
try {
int success = json.getInt(TAG_SUCCESS);
getstatus = success;
if (success == 1) {
Log.d("success!", json.toString());
}
else if (success==0){
return json.getString(TAG_SUCCESS);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
JSONParser.java
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
public static String Result=null;
public JSONParser()
{
}
public static JSONObject makeHttpRequest(String url,String method, List<NameValuePair> pair) {
try {
// check for request method
if(method.equals("POST")){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(pair));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}else if(method.equals("GET")){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(pair, "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, HTTP.UTF_8), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
Result = json;
} 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;
}
}
On Button click listener write
new SignupProcess().execute();
来源:https://stackoverflow.com/questions/31233791/inserting-data-into-mysql-from-android-app