آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل در قسمت ثبت نامی و گرفتن متن از EditText (بلاخره درست شد)

mosafer  9 سال پیش  9 سال پیش
+1 0

با سلام

در قسمت ثبت نامی برنامم که 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;
}
 

 

دلیل این مشکل چی میتونه باشه!؟؟

 اینم بگم سرور درست کار میکنه...

0 0
سلام ، من اصلا با Map و HashMap کار نکردم . فقط یه سوال دارم که ممکنه با جوابتون بفهمم مشکل چیه ؟ شما وقتی اطلاعات رو با EditText ها وارد میکنید ، آیا دکمه ای دارید که با کلیک روی اون اطلاعات به سرور ارسال میشه ؟ (9 سال پیش)
0 0
بله ، اگه دقت کرده باشین بالا اشاره کردم (9 سال پیش)
0 0
پس چرا اون کدهای گرفتن متن ها درون onClick دکمه نیست ؟ (9 سال پیش)
0 0
فرق نمیکنه. چون من دستورات ارسال و دریافت اطلاعات رو درون یه متد گذاشتم و درون دکمه فراخوانی کردم. (9 سال پیش)
0 0
یعنی کدهای بالا داخل همون متده هست ؟ منم اول همین حدسو زدم ولی بعد گفتم این چه متدیه که داخل onClick دکمه هست ! داخل onClick فقط میشه دستور نوشت ، ولی شما متد Override کردین ! الان شما داخل متد getParams ، از name یه لوگ بگیر ببین null نیست ؟ (9 سال پیش)
0 0
نمیدونم منظورم رو رسوندم یا نه . میدونم شما در onClick آدرس یه متد رو نوشتین . خب تا اینجا اوکی . ولی داخل اون متد که نباید چیزی override بشه ! (9 سال پیش)
0 0
نه قبلا امتحان کردم مشکلی نداشت..فکر میکنم که ایراد اصلی از EditText هست. ولی از چیشه نمیدونم. حتی من trim کردم ولی ...مغزم نمیکشه دیگه (9 سال پیش)
0 0
یه نگاهی به این لیک بنداز لینک (9 سال پیش)
0 0
درسته ، کد هاتون فرقی نداره با این لینک ، نمیدونم مشکل چیه ! (9 سال پیش)
0 0
منم عجیب موندم که چرا اینجوریه..!!! (9 سال پیش)
0 0
کسی از دوستان میتونه کمک و یا راهنمایی منه... (9 سال پیش)
0 0
هر کاری میکنم نمیشه. وقتی اطلاعات رو مستقیم وارد میکنم درسته ولی هر وقت بصورت غیر نستیم ینی گرفتن متن از EditText به مشکل میخورم. لطفا راهنمایی کنید و هر چی که به ذهنتون میرسه بگین شاید کارگشا بود (9 سال پیش)
0 0
بین put ها لگ بذار ببین name و family مقدارش چیه . احتمالا باید نال باشه که کد اشتباه میده . (9 سال پیش)
0 0
قبلا این کارو کردم. دیگه کلافه شدم اصلا نمیفهمم.... (9 سال پیش)
0 0
واقعا کسی نمیدونه ایراد کار کجاست..؟!!! (9 سال پیش)
0 0
چک کنید Edit text ها آیدیشون درسته؟ یکبار آیدیشون عوض کنید پروژتون رو clean کنید دوباره چک کنید ! (9 سال پیش)
0 0
آی دیشون درسته. (9 سال پیش)
 برای این سوال 6 پاسخ وجود دارد.
پاسخ به سوال 
SaeiD-as  9 سال پیش
0 0

این روش رو امتحان کنید ببینید جواب می‌گیرید:

داخل 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 که می فرستید بگیرید و اونو در مرورگرتون وارد کنید، شاید اونجا مشکلتون مشخص بشه،

موفق باشید

 

0 0
آقا بازم نشد. از این خط params.clear(); خطای java.lang.NullPointerException میده. (9 سال پیش)
0 0
آقا سعید ببین من وقتی دستی خودم اطلاعات رو میدم که بفرستم سمت سرور مشکلی نداره ولی وقتی از طریق EditText میگیرم و میفرستم به مشکل میخورم. (9 سال پیش)
0 0
یه چیزی که برام خیلی عجیبه اینکه به صورت دستی وقتی اطلاعات رو میدم درست انجام میشه بعد میام همون اطلاعات رو از طریق EditText وارد میکنم و میفرستم که به مشکل میخوره! (9 سال پیش)
0 0
همجا هم لاگ گذاشتم مشکلی نبود... (9 سال پیش)
0 0
من فکر میکنم مشکل باید از کیبورد لوکال باشه. کسی میدونه چکار باید کنم ت این زمینه؟ (9 سال پیش)
+1 0
این موضوع یا بخاطر درج نشدن مقادیر در ورودی های اون hashMap هست (احتمال زیاد همین هست) یا اینکه باید موقع ارسال پکت ها به سرور چک کنید که پکتی که از سمت برنامه شما ارسال میشه مقادیر رو به چه صورت ارسال میکنه که پیشنهاد میدم از بزار PacketCapture استفاده کنید در اندروید. از کیبورد نیست! (9 سال پیش)
0 0
راستی میشه بفرمایید چرا از HashMap استفاده کردید؟؟؟ (9 سال پیش)
0 0
پس از چی استفاده کنم . خب چون از کتابخانه Volley و متد Post استفاده کردم اینجوری هست (9 سال پیش)
+1 0
خب وقتی دستی میدین یعنی سرور و volley داره درست کار میکنه و اشکال از قسمت edittext تا جایی هست که شما اطلاعات رو دستی وارد میکنید. توی editText از فونت فارسی استفاده کردین ؟ از خروجی های editText هاتون Log بگیرین ببینید که توی Log اعداد رو به فارسی میزنه یا انگلیسی. (9 سال پیش)
0 0
الان کامنت هارو کامل خوندم به احتمال زیاد از فارسی بودن اعداد، Log بگیرید ببینید اگر اعداد فارسیه راه حلش رو بگم. (9 سال پیش)
0 0
والا من هی لاگ میگیرم به صورت انگلیسی هست. ولی خب شما راه حلی دارین بگین شاید چیزی که میره سمت سرور درست نباشه. (9 سال پیش)
0 0
خوشحالم که جواب گرفتید، ببخشید من دیر به دیر به سایت سر میزنم، موفق باشید، راستی شما که به گاندولف و ارباب حلقه ها علاقه مندید، یه برنامه براش بنویسید ;) (9 سال پیش)
0 0
ممنونم آقا سعید لطف داری داداش گلم. ایده خوبیه باشه حتما... (9 سال پیش)
پاسخ به سوال 
امید  9 سال پیش
0 0

کل خروجی 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 رو به سرور ارسال کنید.

0 0
خب ینی مقدار EditText بریزم ت متغیر number بعد از این فیلتر میرزه ت متغیر chars درست میگم؟ (9 سال پیش)
0 0
روش مصرف رو بالا اضافه کردم (9 سال پیش)
0 0
نه اینم نشد.. بازم ممنون (9 سال پیش)
پاسخ به سوال 
mosafer  9 سال پیش
0 0

یه چیزی که اینجا مشکله اینه که متاسفانه سرور دست ما نیست.

بلکه ما برای اون شرکتی که سرور سایت رو زده اپلیکیشنش رو ساختیم.

حالا اونا موقع ثبت نام فقط کد ملی رو چک میکنن که تکراری نباشه!

ولی من به صورت زیر کد ملی رو مستقیم وارد کردم و باقی رو با 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  **

0 0
از PacketCapture استفاده کردید؟ میشه نسخه ای که تست کردی و این مشکل رو داره یجا آپلود کنید و لینک هم قرار بدید و ما هم تست کنیم و شاید مشکل از دیوایس شما بوده باشه.. (9 سال پیش)
0 0
PacketCapture چی هست؟ (9 سال پیش)
0 0
لینک (9 سال پیش)
پاسخ به سوال 
hamcalas  9 سال پیش
0 0

 

 
 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 بگذارید.

 

 

پاسخ به سوال 
mosafer  9 سال پیش
0 0

ببینید این 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>

 

خب حالا بنظرتون مشکل کجاست...؟؟

 

0 0
کسی متوجه نشد مشکل از کجاست؟ (9 سال پیش)
پاسخ به سوال 
mosafer  9 سال پیش
+2 0

بلاخره درست شد

با این تیکه کد برای هر پارامتر :

 String name = editTextName.getText().toString();

byte ptext[] = name.getBytes("UTF8");

for (int i = 0; i < ptext.length; i++) {

name = ptext[i] + "";

}

در آخر هم از همه دوستان گرامی که هم فکری کردن صمیمانه تشکر میکنم.

ممنونم از همتون

0 0
من این کارو کردم ولی جواب نداد !!! (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .