PDA

View Full Version : راهنمایی جهت رفع مشکل وب سرویس



mpoorfaez.en
جمعه 15 خرداد 1394, 15:18 عصر
سلام . خسته نباشید . ممنون میشم کسی منو راهنمایی کنه . حقیقتا خیلی سختی کشیدم برای به دست آوردن ارتباط با وب سرویس . همه آموزش ها رو انجام دادم اما به یک جا یک مشکلی بر میخورم .
کدی وب سرویس ساده من در آدرس زیر هستش :
http://mpoorfaez.zgig.ir/OK.php
که کد این قسمت بدین صورت هستش :

<?php
$host='mysql.zgig.ir';
$uname='u681403126_mp';
$pwd='121191';
$db="u681403126_mp";
$con = mysql_connect($host,$uname,$pwd) or die("connection failed");
mysql_select_db($db,$con) or die("db selection failed");
$id=$_REQUEST['id'];
$name=$_REQUEST['name'];
$flag['code']=0;
if($r=mysql_query("insert into sample values('$id','$name') ",$con))
{
$flag['code']=1;
echo"hi";
}
print(json_encode($flag));
mysql_close($con);
?>

کدی هم که برای اتصال به این وب سرویس در برنامه اندرویدم نوشتم اینه :

package balaji.mysql_insert;



import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity ;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

String name;
String id;
InputStream is=null;
String result=null;
String line=null;
int code;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final EditText e_id=(EditText) findViewById(R.id.editText1);
final EditText e_name=(EditText) findViewById(R.id.editText2);
Button insert=(Button) findViewById(R.id.button1);

insert.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

id = e_id.getText().toString();
name = e_name.getText().toString();

insert();
}
});
}

public void insert()
{
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

nameValuePairs.add(new BasicNameValuePair("id",id));
nameValuePairs.add(new BasicNameValuePair("name",name));

try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.mpoorfaez.zgig.ir/ok.php");
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("Fail 3", e.toString());
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}

این دو قسمت رو هم در AndroidManifest.xml اضافه کردم :

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

برنامه رو که اجرا میکنم باز ارتباط رو مقدور نمیسازه . خط به خط دیباگ کردم فهمیدم ارتباطه Response برقرار نمیشه .
چندین دستور العمل از سایت های ایرانی و خارجی پیدا کردم و هر آموزشی رو انجام دادم اما اعمال نمیشه که نمیشه . راهنماییم کنید سپاسگذارم . فقط تقریبا مطمئنم ارتباط مربوط به response اعمال نمیشه . دلایلش چی میتونه باشه؟

mz6488
جمعه 15 خرداد 1394, 20:45 عصر
سلام.متن خطاش رو بدید

tux-world
جمعه 15 خرداد 1394, 22:51 عصر
به جای خطهای


HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.mpoorfaez.zgig.ir/ok.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("pass 1", "connection success ");

اینو تست کنید


HttpConnectionParams.setConnectionTimeout(httpClie nt.getParams(), this.connectionTimeout);
stringEntity = new StringEntity(jsonObject.toString());
httpPost.setEntity(new StringEntity(jsonObject.toString(), "UTF-8"));
stringEntity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpResponse = httpClient.execute(httpPost);


if (httpResponse != null) {
result = httpResponse.getEntity().getContent();
}

mpoorfaez.en
جمعه 15 خرداد 1394, 23:12 عصر
سلام.متن خطاش رو بدید
ضمن عرض تشکر به خاطر جوابی که دادین .
دوست عزیزم برنامه به راحتی اجرا میشه و فقط به محضی که روی دکمه ثبت کلیک میکنم که وظیفه این دکمه اتصال به وب سرویس هستش این پیام خطا رو در مانیتور ایکلیپس نمایش میدهد
131979

mpoorfaez.en
جمعه 15 خرداد 1394, 23:30 عصر
به جای خطهای


HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.mpoorfaez.zgig.ir/ok.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("pass 1", "connection success ");

اینو تست کنید


HttpConnectionParams.setConnectionTimeout(httpClie nt.getParams(), this.connectionTimeout);
stringEntity = new StringEntity(jsonObject.toString());
httpPost.setEntity(new StringEntity(jsonObject.toString(), "UTF-8"));
stringEntity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpResponse = httpClient.execute(httpPost);


if (httpResponse != null) {
result = httpResponse.getEntity().getContent();
}



با سلام و تشکر . کدهای شما را ثبت کردم ولی حاوی خطا بود و از همه چیزش ایراد میگرفت نفهمیدم چه جوری باید رفعش کنم
از ConnectionTimeout
از sjonobject
از stringentriy
از هر خط های دیگرش ایراد گرفت که تصحیحش کردم اما برخیشو جاگزین نفهمیدم چه جوری باید بکنم اگه برایتون مقدوره کد رو به صورت کامل برام بنویسین و جایگزین اون چند خط بشه . ممنونم

pbm_soy
شنبه 16 خرداد 1394, 01:47 صبح
تا اونجائی که میدانم شما درخواست را که میخواهید برای وب سرویس ارسال کنید باید تحت یک Thread مجزا باید انجام بدید
حتی در تصویری که در آن خطا را نمایش دادید هم اگه دقت کنید اولین خط قرمز را مشاهده کنید گفته "خطای درخواست شبکه بروی نخ اصلی"

در بیشتر آموزشهای وب سرویس همین کدی که شما نوشتید را مینویسند و برخی دلسوزان هم در ادامه مینویسن که این کد را در یک Thread باید بنویسید (شاید بعضیا هم بگن اگه خطا در یک thread بنویسید)
در کل منظورم این بود که در آموزشها چون تیکه کد است باید توضیحات کنار آنها را کامل بخوانید

برای حل مشکل دستورات داخل تابع insert را در یک Thread بنویسید و آنرا اجرا کنید و یا در یک runnable و یا از AsyncTask استفاده کنید اگه آموزشها را دقت کنید و یا کد نهائی و یا فایل پروژه نهائی را بگیرید و بررسی کنید حتما خواهید دید

mpoorfaez.en
شنبه 16 خرداد 1394, 21:23 عصر
تا اونجائی که میدانم شما درخواست را که میخواهید برای وب سرویس ارسال کنید باید تحت یک Thread مجزا باید انجام بدید
حتی در تصویری که در آن خطا را نمایش دادید هم اگه دقت کنید اولین خط قرمز را مشاهده کنید گفته "خطای درخواست شبکه بروی نخ اصلی"

در بیشتر آموزشهای وب سرویس همین کدی که شما نوشتید را مینویسند و برخی دلسوزان هم در ادامه مینویسن که این کد را در یک Thread باید بنویسید (شاید بعضیا هم بگن اگه خطا در یک thread بنویسید)
در کل منظورم این بود که در آموزشها چون تیکه کد است باید توضیحات کنار آنها را کامل بخوانید

برای حل مشکل دستورات داخل تابع insert را در یک Thread بنویسید و آنرا اجرا کنید و یا در یک runnable و یا از AsyncTask استفاده کنید اگه آموزشها را دقت کنید و یا کد نهائی و یا فایل پروژه نهائی را بگیرید و بررسی کنید حتما خواهید دید


آقا دستت درد نکنه . خیلی ممنون ار لطفت . مشکلم برطرف شد . یه دنیا سپاسگذارم . این تاپیک رو پاک کنم یا به نظرت نگه دارم دیگران شاید نیاز به کمک داشته باشن

pbm_soy
یک شنبه 17 خرداد 1394, 01:11 صبح
چرا پاک کنید؟!
حالا که به نتیجه رسیده و مشکلی از مشکلات برنامه نویسی آندروید را حل کرده بذارید باشه تا دیگران هم استفاده کنند!
و حتی باعث میشه که دیگران هم این سوال را مطرح نکنند البته به شرطی که قبل تاپیک زدن سرچ کنند!
در ضمن برای تشکر کردن پایین هر پست گزینه تشکر کردن موجود است :لبخندساده: