ورود

View Full Version : خطا در هنگام ارتباط با وب سرویس در برنامه



CodeforLife
یک شنبه 25 مهر 1395, 17:11 عصر
سلام دوستان گرامی . من برنامه ای نوشتم که در mysql یه بانک و یه جدول ایجاد کردم .
و یه سری داده دادم بهشون .
بعد کد های php رو نوشتم که query نوشتم که همه رو انتخاب کنه .
و urlمن هم localhost هست ....
بعد اومدم در اندورید یه کلاس برای web service ساختم و از http client استفاده کردم و لی runtime دارم
کدها رو میگذارم ممنون میشم راهنمایی کنید و حدسیات و تجربه و ... رو به من بگید

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class WebService {
public static String readUrl(String url) {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
try {
HttpResponse httpResponse = httpClient.execute(httpPost);
InputStream inputStream = httpResponse.getEntity().getContent();
String result = convertInputStreamToString(inputStream);
return result;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

private static String convertInputStreamToString(InputStream inputStream) {
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();

String line = "";
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
return stringBuilder.toString();

} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}








@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});


String result = WebService.readUrl("http://localhost/note-server/");
if (result != null) {
try {
JSONArray tasks = new JSONArray(result);
for(int i=0;i<tasks.length();i++){
JSONObject task=tasks.getJSONObject(i);
Log.i("L",task.getString("task tilte"));
}
} catch (JSONException e) {
e.printStackTrace();
}

}

CodeforLife
یک شنبه 25 مهر 1395, 17:13 عصر
at com.example.parisa.noteapplication.WebService.read Url(WebService.java:26)


at com.example.parisa.noteapplication.MainActivity.on Create(MainActivity.java:47)


FATAL EXCEPTION: main
Process: com.example.parisa.noteapplication, PID: 29346
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.parisa.noteapplication/com.example.parisa.noteapplication.MainActivity}: android.os.NetworkOnMainThreadException
at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2462)

این هم متن خطا

spiderman200700
یک شنبه 25 مهر 1395, 22:55 عصر
سلام.
باید متد readUrl رو روی Threadمجزا اجرا کنید.
روی UI Thread نمیشه کارهای مربوط به ارتباط با وب سرویس رو انجام

CodeforLife
دوشنبه 26 مهر 1395, 12:30 عصر
سلام و ممنونم
من یه سوال دیگه هم دارم
اگر برنامه ای که در سمت سرور هست یه بانک داشته باشه , برنامه ای سمت اندروید هست هم باید بانک با همون مشخصات داشته باشه دیگه ؟؟؟؟
دقیقا با همون مشخصات ؟؟؟؟و جداول و نام ها و داده ها!!!!!؟؟؟؟؟

spiderman200700
دوشنبه 26 مهر 1395, 15:03 عصر
لزوما نیازی نیست اینجوری باشه.
بستگی به هدف شما داره.
معمولا برای اینکه برنامه در حالت آفلاین هم کارایی داشته باشه در سمت کلاینت هم دیتابیس رو ایجاد میکنن و اطلاعاتش رو با آنلاین شدن آپدیت میکنن.

CodeforLife
دوشنبه 26 مهر 1395, 15:53 عصر
سلام من thread گذاشتم متوجه شدم برنامه یه خطای دیگه داره

Thread thread =new Thread(new Runnable() {
@Override
public void run() {
String result = WebService.readUrl("http://localhost/note-server/");
if (result != null) {
try {
JSONArray tasks = new JSONArray(result);
for(int i=0;i<tasks.length();i++){
JSONObject task=tasks.getJSONObject(i);
Log.i("L",task.getString("task-title"));
}
} catch (JSONException e) {
e.printStackTrace();
}

}
}
});
thread.start();



در حال حاضر متوجه شدم که به پورت 80 وصل نمیشه
و زمانیکه روی wifi هم میرم که ip address ام رو ببینم هیچ ip ثبت نشده !!!!!
خطا به این صورت هست
org.apache.http.conn.httphost
connection Excepton to http://
local host refuse


faild to connect to 127.0.0.1
port 80
باید چه کار کنم به نظر شما ؟؟؟؟

hamid_hr
دوشنبه 26 مهر 1395, 17:36 عصر
http://localhost/note-server/
این برای زمانی هست که وب سرویس رو از روی سیستم خودتون باز میکنین
برا ارتباط با موباین به جای localhost باید ای پی سیستم رو بزارید

CodeforLife
دوشنبه 26 مهر 1395, 19:46 عصر
خیلی ممنونم از شما ولی
من با ip سیستم هم امتحان کردم
ولی متاسفانه جواب نگرفتم
خیلی عجیبه
prmission هم دادم . ای پی هم درسته سرویس ها هم غیر فعاله که روی پورت 80 هستش!
همه چی رو تست کردم . حتی تو آپاچی تو متنش نوشتم Allow to all


به نظر شما راه دیگه ای میرسه؟
ممنون میشم راهنمایی بفرمایید

hamid_hr
دوشنبه 26 مهر 1395, 20:54 عصر
ابتدا تست کنید ببینید با یه سیستم دیگه میشه وب سرویسو ببینین
ادرسشو تو وب بروزر بزنید ببینین چی میاد؟

spiderman200700
دوشنبه 26 مهر 1395, 23:38 عصر
خیلی ممنونم از شما ولی
من با ip سیستم هم امتحان کردم
ولی متاسفانه جواب نگرفتم
خیلی عجیبه
prmission هم دادم . ای پی هم درسته سرویس ها هم غیر فعاله که روی پورت 80 هستش!
همه چی رو تست کردم . حتی تو آپاچی تو متنش نوشتم Allow to all


به نظر شما راه دیگه ای میرسه؟
ممنون میشم راهنمایی بفرمایید

روی emulator تست میکنید یا روی گوشی؟
آی پی سیستم رو چی وارد کردید؟

CodeforLife
سه شنبه 27 مهر 1395, 07:33 صبح
سلام ممنون متوجه شدم که چون روی گوشی تست میکردم .و گوشی به اون دسترسی نداشت به این مسئله برمی خورم . حالا باید ببرمش روی هاست رایگان که البته نمی دونم چه جوریه ؟

spiderman200700
سه شنبه 27 مهر 1395, 11:44 صبح
خواهش میکنم.
گوشی هم دسترسی داره. فقط باید آی پی رو درست وارد کنید و مشکل فایروال هم نداشته باشید

CodeforLife
پنج شنبه 06 آبان 1395, 12:51 عصر
سلام . ممنون
یعنی اگر آدرس ای پی گوشی رو بدم , درست میشه؟؟؟؟

CodeforLife
پنج شنبه 06 آبان 1395, 13:55 عصر
با سلام مجدد من دوباره آدرس ای پی گوشی رو به برنامه دادم
و تو گوشی سرچ کردم , مثلا
192.168.1.101/note-server
ولی تو بروزر من پیداش نمی کنه!
نمی دونم باید چه کار کنم یعنی باید با شبیه ساز کار کنم یا فایروالم رو غیر فعال کنم ؟ یا ؟؟؟؟

spiderman200700
پنج شنبه 06 آبان 1395, 14:04 عصر
این آی پی:192.168.1.101، آی پی گوشیه؟ یا آی پی سرور؟

CodeforLife
پنج شنبه 06 آبان 1395, 14:17 عصر
سلام
گوشی
من سرور ندارم که local host کار میکنم

CodeforLife
پنج شنبه 06 آبان 1395, 14:19 عصر
ادرس ای پی سیتم هم میزنم 192.168.143.2
با اینکه تو بروزر دارمش ولی برنامه داری خطا هستش

CodeforLife
پنج شنبه 06 آبان 1395, 14:26 عصر
وقتی برک پوینت گذاشتم در قسمت خوندن url خطا میده که به این ای پی وصل نمیشه
143212

spiderman200700
پنج شنبه 06 آبان 1395, 17:26 عصر
سلام
گوشی
من سرور ندارم که local host کار میکنم
شما آدرس آی پی گوشی رو برای ارتباط با سرور استفاده می کنی؟!!! نمیشه که!!
باید از آدرس آی پی سیستم استفاده کنی.

در ضمن سرور به خدمات دهنده میگن. حالا فرقی نداره این خدمات دهنده روی سیستم باشه یا روی یه کامپیوتر توی اونور دنیا.

spiderman200700
پنج شنبه 06 آبان 1395, 17:27 عصر
ادرس ای پی سیتم هم میزنم 192.168.143.2
با اینکه تو بروزر دارمش ولی برنامه داری خطا هستش
احتمالا مشکل از فایروال ویندوزه.
باید Apache رو در فایل وال ویندوز جز برنامه های مجاز قرار بدید تا مشکل حل بشه

CodeforLife
پنج شنبه 06 آبان 1395, 19:21 عصر
ممنون از توضیحات شما
میشه بگین چه طور باید این کار رو یعنی مجاز کردن آپاچی رو انجام بدم؟؟؟

spiderman200700
شنبه 08 آبان 1395, 11:59 صبح
خواهش میکنم
یه سرچ کنی راحت روشش پیدا میشه
مثلا این:
http://stackoverflow.com/questions/14432760/how-can-i-use-my-xampp-server-so-that-everyone-from-the-outer-web-can-acces-it