2014-10-27 4 views
0

Я пытаюсь отправить данные на веб-сервер через фоновое обслуживание.Проводка данных через службу вызывает сбой приложения

Функция PostData отправляет данные на сервер, но когда я добавил его программа показывает:

, к сожалению, программа перестала работать

Вот мой код:

package com.yahya.trackingsysem; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
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 android.app.Service; 
import android.content.Intent; 
import android.os.Handler; 
import android.os.IBinder; 
import android.widget.Toast; 

public class MyService extends Service { 

    Handler handler=new Handler(); 
    String info; 

    @Override 
    public void onCreate() { 
hello(); 
    } 

    void hello(){ 

     final Runnable r = new Runnable() 
     { 
      public void run() 
      { 
       Toast.makeText(getApplicationContext(), "Starting service", Toast.LENGTH_LONG).show(); 
      //////////////////// 
       postData(); 
      //////////////////// 
       handler.postDelayed(this, 10000); 
      } 
     }; 

     handler.postDelayed(r, 10000); 

    } 

    //********************* فنكشن الارسال 
    public void postData() { 
     // Create a new HttpClient and Post Header 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://www.webserver.net/tracker.php"); 

     try { 
      // Add your data 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
      nameValuePairs.add(new BasicNameValuePair("name", "Hi")); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      // Execute HTTP Post Request 
      httpclient.execute(httppost); 

     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
     } 
    } 
    //**************************************** 



    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 


} 

И трасса:

10-27 06:11:59.094: E/AndroidRuntime(810): FATAL EXCEPTION: main 
10-27 06:11:59.094: E/AndroidRuntime(810): android.os.NetworkOnMainThreadException 
10-27 06:11:59.094: E/AndroidRuntime(810): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133) 
10-27 06:11:59.094: E/AndroidRuntime(810): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
10-27 06:11:59.094: E/AndroidRuntime(810): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
10-27 06:11:59.094: E/AndroidRuntime(810): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
10-27 06:11:59.094: E/AndroidRuntime(810): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
10-27 06:11:59.094: E/AndroidRuntime(810): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
10-27 06:11:59.094: E/AndroidRuntime(810): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
10-27 06:11:59.094: E/AndroidRuntime(810): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
10-27 06:11:59.094: E/AndroidRuntime(810): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
10-27 06:11:59.094: E/AndroidRuntime(810): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
10-27 06:11:59.094: E/AndroidRuntime(810): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
10-27 06:11:59.094: E/AndroidRuntime(810): at com.yahya.trackingsysem.MyService.postData(MyService.java:60) 
10-27 06:11:59.094: E/AndroidRuntime(810): at com.yahya.trackingsysem.MyService$1.run(MyService.java:37) 
10-27 06:11:59.094: E/AndroidRuntime(810): at android.os.Handler.handleCallback(Handler.java:730) 
10-27 06:11:59.094: E/AndroidRuntime(810): at android.os.Handler.dispatchMessage(Handler.java:92) 
10-27 06:11:59.094: E/AndroidRuntime(810): at android.os.Looper.loop(Looper.java:137) 
10-27 06:11:59.094: E/AndroidRuntime(810): at android.app.ActivityThread.main(ActivityThread.java:5103) 
10-27 06:11:59.094: E/AndroidRuntime(810): at java.lang.reflect.Method.invokeNative(Native Method) 
10-27 06:11:59.094: E/AndroidRuntime(810): at java.lang.reflect.Method.invoke(Method.java:525) 
10-27 06:11:59.094: E/AndroidRuntime(810): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
10-27 06:11:59.094: E/AndroidRuntime(810): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-27 06:11:59.094: E/AndroidRuntime(810): at dalvik.system.NativeStart.main(Native Method) 
10-27 06:12:09.094: I/Process(810): Sending signal. PID: 810 SIG: 9 
10-27 06:12:24.545: D/AndroidRuntime(828): Shutting down VM 
10-27 06:12:24.545: W/dalvikvm(828): threadid=1: thread exiting with uncaught exception (group=0x41465700) 
10-27 06:12:24.595: E/AndroidRuntime(828): FATAL EXCEPTION: main 
10-27 06:12:24.595: E/AndroidRuntime(828): android.os.NetworkOnMainThreadException 
10-27 06:12:24.595: E/AndroidRuntime(828): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133) 
10-27 06:12:24.595: E/AndroidRuntime(828): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
10-27 06:12:24.595: E/AndroidRuntime(828): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
10-27 06:12:24.595: E/AndroidRuntime(828): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
10-27 06:12:24.595: E/AndroidRuntime(828): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
10-27 06:12:24.595: E/AndroidRuntime(828): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
10-27 06:12:24.595: E/AndroidRuntime(828): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
10-27 06:12:24.595: E/AndroidRuntime(828): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
10-27 06:12:24.595: E/AndroidRuntime(828): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
10-27 06:12:24.595: E/AndroidRuntime(828): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
10-27 06:12:24.595: E/AndroidRuntime(828): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
10-27 06:12:24.595: E/AndroidRuntime(828): at com.yahya.trackingsysem.MyService.postData(MyService.java:60) 
10-27 06:12:24.595: E/AndroidRuntime(828): at com.yahya.trackingsysem.MyService$1.run(MyService.java:37) 
10-27 06:12:24.595: E/AndroidRuntime(828): at android.os.Handler.handleCallback(Handler.java:730) 
10-27 06:12:24.595: E/AndroidRuntime(828): at android.os.Handler.dispatchMessage(Handler.java:92) 
10-27 06:12:24.595: E/AndroidRuntime(828): at android.os.Looper.loop(Looper.java:137) 
10-27 06:12:24.595: E/AndroidRuntime(828): at android.app.ActivityThread.main(ActivityThread.java:5103) 
10-27 06:12:24.595: E/AndroidRuntime(828): at java.lang.reflect.Method.invokeNative(Native Method) 
10-27 06:12:24.595: E/AndroidRuntime(828): at java.lang.reflect.Method.invoke(Method.java:525) 
10-27 06:12:24.595: E/AndroidRuntime(828): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
10-27 06:12:24.595: E/AndroidRuntime(828): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-27 06:12:24.595: E/AndroidRuntime(828): at dalvik.system.NativeStart.main(Native Method) 

ответ

3

Вы не можете использовать какой-либо материал, связанный с пользовательским интерфейсом, в потоке, и здесь вы показываете сообщение Toast в цепочке, в котором он сбой. Для этого вам нужно использовать обработчик для отображения тоста.

Пример ..

Runnable runnable = new Runnable() { 
      public void run() { 
       Message msg = handler.obtainMessage(); 
       Bundle bundle = new Bundle();     
       bundle.putString("myKey", dateString); 
       msg.setData(bundle); 
       handler.sendMessage(msg); 
      } 
     }; 

private final Handler handler = new Handler() { 

     public void handleMessage(Message msg) { 

      String aResponse = msg.getData().getString("message"); 

      Toast.makeText(getApplicationContext(), ""+msg, Toast.LENGTH_LONG).show(); 

      } 
}; 

// Записываем этот код на вашем классе обслуживания.

if (android.os.Build.VERSION.SDK_INT > 9) { 
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 
} 

// MainFest

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

Мне не нужен тост, поэтому я удалил его, проблема осталась прежней –

+0

Не могли бы вы опубликовать журнал ошибок. – samsad

+0

Я добавил logcat для ошибки –

3

Проблема может быть с тостом.

Удалить TOAST.show().

+0

тост работает нормально, пока я не добавил функцию постдатировать(), хотя я попытался удалить тост, но та же проблема rised –

+0

Можете ли вы опубликовать журнал ошибок. – Akhil

+0

вы можете увидеть logacat сейчас –

Смежные вопросы