مشکل در قسمت ثبت نامی و گرفتن متن از EditText (بلاخره درست شد)
با سلام
در قسمت ثبت نامی برنامم که 6 EditText دارم اطلاعات درخواستی رو وارد میکنم و به وسیله کتابخانه Volley با سرور ارتباط برقرار میکنم
که با متد Post اطلاعات رو میفرستم که در صورت تایید ثبت نام کد 0 رو دریافت میکنم و در صورت تکراری بودن ثبت نامی کد 1 رو برمیگردونه و در صورت ایرادی در ثبت نام کد 1- رو به من میده.
حالا وقتی با EditText ها اطلاعات رو وارد میکنم و دکمه ثبت نامی رو میزنم یا کد 1 رو بهم میده یا 1- !!!
به این صورت :
Map<String, String> params = new HashMap<String, String>();
String name = editTextName.getText().toString().trim();
String family = editTextFamily.getText().toString().trim();
String nationaId = editTextNationalId.getText().toString().trim();
String mobail = editTextMobil.getText().toString().trim();
String birth = editTextBirth.getText().toString().trim();
String email = editTextEail.getText().toString().trim();
@Override
protected Map<String, String> getParams() {
params.put("id", "4");
params.put("name", name);
params.put("family", family);
params.put("cMeli", nationaId);
params.put("tt", birth);
params.put("mob", mobail);
params.put("email", email);
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
params.put("id", "4");
params.put("name", name);
params.put("family", family);
params.put("cMeli", nationaId);
params.put("tt", birth);
params.put("mob", mobail);
params.put("email", email);
return params;
}
ولی زمانی که اطلاعات رو دستی وارد میکنم ثبت نام درست انجام میشه و کد صفر رو برمیگردونه.
به این صورت :
Map<String, String> params = new HashMap<String, String>();
@Override
protected Map<String, String> getParams() {
params.put("id", "4");
params.put("name", "moslem");
params.put("family", "jamshidpoor");
params.put("cMeli", "1111111111");
params.put("tt", "1970/08/24");
params.put("mob", "0912222222");
params.put("email", "sdfajksd@yahoo.com");
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
params.put("id", "4");
params.put("name", "moslem");
params.put("family", "jamshidpoor");
params.put("cMeli", "1111111111");
params.put("tt", "1970/08/24");
params.put("mob", "0912222222");
params.put("email", "sdfajksd@yahoo.com");
return params;
}
دلیل این مشکل چی میتونه باشه!؟؟
اینم بگم سرور درست کار میکنه...
این روش رو امتحان کنید ببینید جواب میگیرید:
داخل onClick برنامه تون متن داخل EditTewt رو بخونید و به تابعی که برای کتابخونه Volley نوشتید بفرستید:
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
params.clear();
params.put("user_name", edtName.getText().toString());
params.put("user_phone", edtPhone.getText().toString());
//اگه باز هم جواب نگرفتید اینجا یه لوگ قرار بدید ببینید تکست تون درست دریافت شده یا نه
populateFromWeb();
});
تابع Volley هم به این صورت باشه:
private void populateFromWeb() {
String url = "your url";
StringRequest request = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("LOG", "Responce = " + response);
if (response != null) {
try {
JSONArray brs = new JSONArray(response);
JSONObject object = brs.getJSONObject(0);
if ( object.getInt("user_ok").equals(0)) {//خروجی که مد نظرت است از سرور بگیری رو اینجا قرار داده ام
//your code
}else if ( object.getInt("user_ok").equals(1)) {
//your code
} else{
//your code
}
}
catch (JSONException e) {
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError ex) {
Toast.makeText(G.context, R.string.connect_fail, Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() {
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return params;
}
};
RequestQueue queue = Volley.newRequestQueue(G.context);
queue.add(request);
}
اگه دیدید که باز هم جواب نگرفتید داخل onClick یه LOG قرار بدید، اگه دیدید اونجا هم مشکل داره، داخل تابعی که برای ارتباط با volley نوشته ام یه LOG از url که می فرستید بگیرید و اونو در مرورگرتون وارد کنید، شاید اونجا مشکلتون مشخص بشه،
موفق باشید
کل خروجی EditText هات رو از توی این فیلتر رد کن احتمالا درست بشه
private String arabicToEnglish(String number) {
char[] chars = new char[number.length()];
for(int i = 0; i < number.length(); i++) {
char ch = number.charAt(i);
if(ch >= 0x0660 && ch <= 0x0669) ch -= 0x0660 - '0';
else if(ch >= 0x06f0 && ch <= 0x06F9) ch -= 0x06f0 - '0';
chars[i] = ch;
}
return new String(chars);
}
String newText = arabicToEnglish("مقدار EditText")
مقدار EditText رو مثل خط بالا وارد کنید و newString رو به سرور ارسال کنید.
یه چیزی که اینجا مشکله اینه که متاسفانه سرور دست ما نیست.
بلکه ما برای اون شرکتی که سرور سایت رو زده اپلیکیشنش رو ساختیم.
حالا اونا موقع ثبت نام فقط کد ملی رو چک میکنن که تکراری نباشه!
ولی من به صورت زیر کد ملی رو مستقیم وارد کردم و باقی رو با EditText فرستادم ولی بازم کد 1- داد (ثبت نام با مشکل مواجه شده است)
@Override
protected Map<String, String> getParams() {
params.put("id", "4");
params.put("name", utfName);
params.put("family", utfFamily);
params.put("cMeli", "563456345"); // اینجا کد ملی رو مستقیم وارد کردم
params.put("tt", utfBirth);
params.put("mob", utfMobail);
params.put("email", utfEmail);
return params;
}
باهاشون که صحبت کردم گفتن بله با کد ملی چک میشه ولی اگر بقیه اطلاعات هم نامعتبر باشن این کد رو برمیگردونه.
اینو بخونید جوابی هست که بهم دادن ** bale vali baghiye feild ha ham agar motabar nabashe insert break mishe va mipare to catch -1 bar migardoone **
params.put("id", "4");
params.put("name", name);
params.put("family", family);
params.put("cMeli", nationaId);
params.put("tt", birth);
params.put("mob", mobail);
params.put("email", email);
کد ملی را به شکل زیر وارد کنید :
params.put("cMeli", ""+nationaId);
برای ارسال پارامتر و همچنین دریافت unicode را UTF-8 بگذارید.
ببینید این Activity هست...
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
public class ActivityAbove extends Activity {
private EditText editTextName;
private EditText editTextFamily;
private EditText editTextBirth;
private EditText editTextNationalId;
private EditText editTextMobil;
private EditText editTextEmail;
private Button buttonRegister;
private ProgressDialog pDialog;
private String strurl;
private Button buttonRegister1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
editTextName = (EditText) findViewById(R.id.editTextName);
editTextFamily = (EditText) findViewById(R.id.editTextFamily);
editTextNationalId = (EditText) findViewById(R.id.editTextCmeli);
editTextBirth = (EditText) findViewById(R.id.editTexttt);
editTextMobil = (EditText) findViewById(R.id.editTextMob);
editTextEmail = (EditText) findViewById(R.id.editTextEmail);
buttonRegister = (Button) findViewById(R.id.buttonRegister);
buttonRegister.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
String name = editTextName.getText().toString();
String family = editTextFamily.getText().toString();
String birth = editTextBirth.getText().toString();
String national = editTextNationalId.getText().toString();
String mobail = editTextMobil.getText().toString();
String email = editTextEmail.getText().toString();
utfName = URLDecoder.decode(name, "UTF-8");
utfFamily = URLDecoder.decode(family, "UTF-8");
utfBirth = URLDecoder.decode(birth, "UTF-8");
utfNational = URLDecoder.decode(national, "UTF-8");
utfMobail = URLDecoder.decode(mobail, "UTF-8");
utfEmail = URLDecoder.decode(email, "UTF-8");
newCmeli = arabicToEnglish(national);
//اگه باز هم جواب نگرفتید اینجا یه لوگ قرار بدید ببینید تکست تون درست دریافت شده یا نه
populateFromWeb();
}
catch (Exception e) {}
}
});
}
String string;
String newCmeli;
String utfName;
String utfFamily;
String utfBirth;
String utfNational;
String utfMobail;
String utfEmail;
private String arabicToEnglish(String number) {
char[] chars = new char[number.length()];
for (int i = 0; i < number.length(); i++) {
char ch = number.charAt(i);
if (ch >= 0x0660 && ch <= 0x0669)
ch -= 0x0660 - '0';
else if (ch >= 0x06f0 && ch <= 0x06F9)
ch -= 0x06f0 - '0';
chars[i] = ch;
}
return new String(chars);
}
private void populateFromWeb() {
StringRequest request = new StringRequest(Request.Method.POST, "http://ws.acsandemo.ir/api/acsan/", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("LOG", "Responce = " + response);
if (response != null) {
try {
JSONObject json = new JSONObject(response);
JSONArray jr = json.getJSONArray("Table1");
JSONObject jsonObject = jr.getJSONObject(0);
// Log.e("LOG", "object : " + jsonObject.getString("Result"));
if (jsonObject.getString("Result").equals("0")) {
//your code
Log.e("LOG", "object 0: " + jsonObject.getString("Result"));
Toast.makeText(ActivityAbove.this, jsonObject.getString("Result"), Toast.LENGTH_SHORT).show();
} else if (jsonObject.getString("Result").equals("1")) {
//your code
Log.e("LOG", "object 1: " + jsonObject.getString("Result"));
Toast.makeText(ActivityAbove.this, jsonObject.getString("Result"), Toast.LENGTH_SHORT).show();
} else {
//your code
Log.e("LOG", "object -1: " + jsonObject.getString("Result"));
Toast.makeText(ActivityAbove.this, jsonObject.getString("Result"), Toast.LENGTH_SHORT).show();
}
}
catch (JSONException e) {
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError ex) {
Toast.makeText(ActivityAbove.this, "VolleyError", Toast.LENGTH_SHORT).show();
}
}) {
Map<String, String> params = new HashMap<String, String>();
@Override
protected Map<String, String> getParams() {
/*
params.put("id", "4");
params.put("name", "dsghdfcgh");
params.put("family", "sdfh");
params.put("cMeli", "4444448444");
params.put("tt", "2345");
params.put("mob", "3245");
params.put("email", "cvbncvbn");
*/
// params.clear();
params.put("id", "4");
params.put("name", "" + utfName);
params.put("family", "" + utfFamily);
params.put("cMeli", "563456345");
params.put("tt", "" + utfBirth);
params.put("mob", "" + utfMobail);
params.put("email", "" + utfEmail);
Log.i("id", params.put("id", "4"));
Log.i("name", utfName);
Log.i("family", utfFamily);
Log.i("cMeli", string);
Log.i("tt", utfBirth);
Log.i("mob", utfMobail);
Log.i("email", utfEmail);
Log.i("params", "" + params);
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
/*
params.put("id", "4");
params.put("name", "dsghdfcgh");
params.put("family", "sdfh");
params.put("cMeli", "4444448444");
params.put("tt", "2345");
params.put("mob", "3245");
params.put("email", "cvbncvbn");
*/
// params.clear();
params.put("id", "4");
params.put("name", "" + utfName);
params.put("family", "" + utfFamily);
params.put("cMeli", "563456345");
params.put("tt", "" + utfBirth);
params.put("mob", "" + utfMobail);
params.put("email", "" + utfEmail);
Log.i("id", params.put("id", "4"));
Log.i("name", utfName);
Log.i("family", utfFamily);
Log.i("cMeli", string);
Log.i("tt", utfBirth);
Log.i("mob", utfMobail);
Log.i("email", utfEmail);
return params;
}
};
RequestQueue queue = Volley.newRequestQueue(ActivityAbove.this);
// request.setShouldCache(false);
// queue.getCache().clear();
queue.add(request);
}
}
اینم از فایل Xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent" >
<EditText
android:id="@+id/editTextName"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/editTextFamily"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"/>
<EditText
android:id="@+id/editTextCmeli"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:digits="1234567890"
android:ems="10" />
<EditText
android:id="@+id/editTexttt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"/>
<EditText
android:id="@+id/editTextMob"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/editTextEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" />
<Button
android:id="@+id/buttonRegister"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Register" />
</LinearLayout>
خب حالا بنظرتون مشکل کجاست...؟؟
بلاخره درست شد
با این تیکه کد برای هر پارامتر :
String name = editTextName.getText().toString();
byte ptext[] = name.getBytes("UTF8");
for (int i = 0; i < ptext.length; i++) {
name = ptext[i] + "";
}
در آخر هم از همه دوستان گرامی که هم فکری کردن صمیمانه تشکر میکنم.
ممنونم از همتون
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
EditTextهست. ولی از چیشه نمیدونم. حتی منtrimکردم ولی ...مغزم نمیکشه دیگه (9 سال پیش)EditTextبه مشکل میخورم. لطفا راهنمایی کنید و هر چی که به ذهنتون میرسه بگین شاید کارگشا بود (9 سال پیش)