Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

from android through JSON to mysql Arabic

This is my Java file. I'm trying to send Arabic letters not working instead of Arabic words I get ???? ????? ?????.

I can read Arabic from MySQL but I can't add Arabic to MySQL.

public class NewSecret extends Activity {

// Progress Dialog
private ProgressDialog pDialog;

JSONParser jsonParser = new JSONParser();
EditText inputName;
EditText inputDesc;

// url to create new product
private static String url_create_product = "http://laylakaylif.com/android/add_secrets.php";

// JSON Node names
private static final String TAG_SUCCESS = "success";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // fullScreen
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.add);

    // Edit Text
    inputName = (EditText) findViewById(R.id.inputName);
    inputDesc = (EditText) findViewById(R.id.inputDesc);

    LinearLayout ll = (LinearLayout) findViewById(R.id.Lina);

    AdView ad2 = new AdView(NewSecret.this, AdSize.SMART_BANNER,
            "a150b0de6e44a18");
    ll.addView(ad2);
    ad2.loadAd(new AdRequest());

    // Create button
    Button btnCreateProduct = (Button) findViewById(R.id.btnCreateProduct);

    if (inputName.getText().toString().length() <= 0)
        inputName.setError("الرجاء اضافة عنوان!");

    if (inputDesc.getText().toString().length() <= 10)
        inputDesc.setError("الرجاء اضافة نص السر ..");

    // button click event
    btnCreateProduct.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            // creating new product in background thread
            new CreateNewProduct().execute();
        }
    });
}

/**
 * Background Async Task to Create new product
 * */
class CreateNewProduct extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(NewSecret.this);
        pDialog.setMessage("إضافة سر جديد ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    /**
     * Creating product
     * */
    protected String doInBackground(String... args) {
        String title = inputName.getText().toString();
        String description = inputDesc.getText().toString();

        String htmltitle;
        String deshtml;

        htmltitle = TextUtils.htmlEncode(title);
        deshtml = TextUtils.htmlEncode(description);

        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("title", htmltitle));
        params.add(new BasicNameValuePair("description", deshtml));

        // getting JSON Object
        // Note that create product url accepts POST method
        JSONObject json = jsonParser.makeHttpRequest(url_create_product,
                "POST", params);

        // check log cat fro response
        Log.d("Create Response", json.toString());

        // check for success tag
        try {
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {
                // successfully created product
                Intent i = new Intent(getApplicationContext(),
                        AllSecrets.class);
                startActivity(i);

                // closing this screen
                finish();
            } else {
                // failed to create product
            }
        } 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 done
        pDialog.dismiss();
    }

}
}

And this is my PHP JSON file:

 <?php
 header("Content-Type:application/json;charset=utf-8"); //global encoding since this is the config file -- for Arabic support
/*
 * Following code will create a new product row
 * All product details are read from HTTP Post Request
 */

// array for JSON response
$response = array();

// check for required fields
/*if (isset($_POST['title']) && isset($_POST['description'])) {

    $title = json_encode($_POST['title'], JSON_UNESCAPED_UNICODE);
    $description = json_encode($_POST['description'], JSON_UNESCAPED_UNICODE);
*/

if (isset($_REQUEST['title']) && isset($_REQUEST['description'])) {
    echo $_REQUEST['title'].'<br/>';
/*
    $title = json_decode($__REQUEST['title']);
    $description = json_decode($__REQUEST['description']);
*/

    $title = $_REQUEST['title'];
    $description = $_REQUEST['description'];

    // include db connect class
    require_once 'db_connect.php';

    // connecting to db
    $db = new DB_CONNECT();

    //setting the connection charset
     mysql_set_charset('utf8',$db);
     mysql_query("SET NAMES 'utf8'");
     mysql_query("SET CHARACTER_SET utf8;");


    // mysql inserting a new row
    mysql_query("SET NAMES 'UTF8'");
    $result = mysql_query("INSERT INTO secrets(title ,  description) VALUES('$title', '$description')");

    // check if row inserted or not
    if ($result) {
        // successfully inserted into database
        $response["success"] = 1;
        $response["message"] = "Secret successfully added.";

        // echoing JSON response
        echo json_encode($response);
    } else {
        // failed to insert row
        $response["success"] = 0;
        $response["message"] = "Oops! An error occurred.";

        // echoing JSON response
        echo json_encode($response);
    }
} else {
    // required field is missing
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";

    // echoing JSON response
    echo json_encode($response);
}
?>

JSONParser code:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

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 method
    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;

    }
}
like image 312
Ahmed Akour Avatar asked Mar 07 '26 11:03

Ahmed Akour


2 Answers

JSONObject json = jsonParser.makeHttpRequest(url_create_product, "POST", params);

I don't know what JSONParser you are using. It's not part of the standard platform; there are dozens of different classes littered about the web with that name, many of which include a line like:

httpPost.setEntity(new UrlEncodedFormEntity(params));

This is a problem because the default encoding for a UrlEncodedFormEntity is ISO-8859-1 and not UTF-8. If you want to pass UTF-8, include it as a parameter:

httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));

If that's not the problem, suggest posting the JSONParser code.

like image 165
bobince Avatar answered Mar 09 '26 01:03

bobince


for how looking to solve the problem of posting non Latina Charcter (Arabic or others), Use this command in your php page:

header('Content-Type: text/html; charset=utf-8' );

mysql_query("SET NAMES 'utf8'");

mysql_query("CHARACTER SET utf8 COLLATE utf8_general_ci"); 

And for sure you must use UTF in your httpeEntity, Also your MySQL Databse must be encoded with UTF-8

i hope this offer some information for who looking for same issue

like image 29
Mohammed Coder Avatar answered Mar 09 '26 00:03

Mohammed Coder



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!