Android-接收广播意图时出错?

用户名

我有一个service是通过String of JsonMainActivity

GetSubjects.class:

public class GetSubjects extends Service {
    String URL = "http://webservice.jim.com/YYY/XXXX.asmx";
    String Webresponse = "IS NULL ?";
    int scode = 1597536485;
    String result;
    public final static String MY_ACTION = "MY_ACTION";
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(final Intent intent, int flags, final int startId) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                handleStart(intent, startId);
            }
        };
        Thread t = new Thread(r);
        t.start();
        return START_NOT_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    void handleStart(Intent intent, int startId) {
        try {
            Params_GetSubjects param = new Params_GetSubjects(scode);
            result = new mGetSubjects().execute(param).get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }

    public class mGetSubjects extends AsyncTask<Params_GetSubjects, String, String> {

        String NAMESPACE = "http://tempuri.org/";
        String METHOD_NAME = "Get";
        String SOAP_ACTION = "http://tempuri.org/Get";
        @Override
        protected String doInBackground(Params_GetSubjects... params) {
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            request.addProperty("scode", params[0].Scode);
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);
            HttpTransportSE conn = new HttpTransportSE(URL);
            Object object;
            try {
                conn.call(SOAP_ACTION, envelope);
                //SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
                object = envelope.getResponse();
                Webresponse = object.toString();
            } catch (Exception e) {
                e.printStackTrace();
                return "NULL";
            }finally {
                ThreadFinish threadfinish = new ThreadFinish();
                threadfinish.start();
                return Webresponse;
            }
        }
    }
    public class ThreadFinish extends Thread{

        @Override
        public void run() {
            try {
                Intent intent = new Intent();
                intent.setAction(MY_ACTION);
                intent.putExtra("DATAPASSED", result);
                sendBroadcast(intent);
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                stopSelf();
            }
        }
    }
}

这是我的MainActivity:

public class MainActivity extends AppCompatActivity {
    MyReceiver myReceiver;
    private RecyclerView.LayoutManager layoutManager;
    private DrawerAdapter mDrawerAdapter;
    private RecyclerView mRecyclerView;
    List<DrawerItem> draweritemList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startService(new Intent(MainActivity.this, GetSubjects.class));

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        switch (id) {
            case android.R.id.home:
                mDrawerLayout.openDrawer(GravityCompat.START);
                return true;
            case R.id.action_settings:
                return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onStart() {
        myReceiver = new MyReceiver();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(GetSubjects.MY_ACTION);
        registerReceiver(myReceiver, intentFilter);
        super.onStart();
    }

    @Override
    protected void onStop() {
        this.unregisterReceiver(myReceiver);
        super.onStop();
    }

    private class MyReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context arg0, Intent arg1) {

                String datapassed = arg1.getExtras().getString("DATAPASSED");
                Log.i("ASDQWRRYGH",datapassed);

                draweritemList  = JsonParser.parseFeed(datapassed);

                for (int i=0;i < draweritemList.size();i++)
                {
                    Log.i("ASDQWRRYGH",draweritemList.get(i).getTitle());
                }



        }

    }
}

这是我的JsonParer:

public class JsonParser {
    public static List<DrawerItem> parseFeed(String content) {
        try {
            JSONObject jsonRootObject = new JSONObject(content);
            JSONArray jsonArray = jsonRootObject.optJSONArray("Rows");
            List<DrawerItem> draweritemList = new ArrayList<>();
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject obj = jsonArray.getJSONObject(i);
                DrawerItem draweritem = new DrawerItem();

                draweritem.setId(obj.getString("Id"));
                draweritem.setTitle(obj.getString("Title"));
                draweritemList.add(draweritem);
            }
            return draweritemList;
        } catch (JSONException e) {
            e.printStackTrace();
            return null;
        }
    }
}

经常使我从服务中得到结果,但经常使我出现以下错误,我该怎么办?:

在此处输入图片说明

迈克·M

您还需要在其中执行三个附加线程ServiceAsyncTaskThread秒。第一个Thread是执行您的AsyncTask,但由于您正在调用get()它以将返回值分配给,所以它会阻塞return String当网络事务在中完成时AsyncTask,它会启动另一个Thread发送广播,并且这会在doInBackground()可以返回以设置的值之前发生return String,直到它仍然为null时才被广播。

最简单的解决方法是将广播移至该result = ...行之后,并摆脱ThreadFinish该类。

但是,最好在单个线程中顺序执行所有操作;这可能是更可取的。要么在中执行AsyncTask,要么在Thread执行中Runnable

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何修复在Android中接收广播意图时出错

来自分类Dev

Android java.lang.RuntimeException:接收广播意图时出错

来自分类Dev

Phonegap android,config.xml错误,接收广播意图时出错

来自分类Dev

接收广播意图时出错。Eclipse Paho

来自分类Dev

片段中的“接收广播意图时出错”

来自分类Dev

接收广播意图时出错。Eclipse Paho

来自分类Dev

广播接收器未在android中接收意图数据。

来自分类Dev

Android广播接收器未收到意图

来自分类Dev

Android:隐式意图与广播接收器

来自分类Dev

Android:隐式意图与广播接收器

来自分类Dev

致命异常:main; 接收广播意图时出错

来自分类Dev

接收广播Intent时出错{act = android.bluetooth.device.action.FOUND flg = 0x10}

来自分类Dev

Android广播接收器,每次应用启动时都会接收广播

来自分类Dev

手机关闭时的Android广播接收器

来自分类Dev

在应用关闭时从广播接收器运行任务[Android]

来自分类Dev

在Android屏幕关闭时接收事件和意图

来自分类Dev

当子活动的接收者在Android中注册时,如何防止超级活动的广播接收者接收广播消息

来自分类Dev

Wifi广播android内部的android意图

来自分类Dev

Wifi广播android内部的android意图

来自分类Dev

接收广播意图时,在BroadcastReceiver中获取ListView错误

来自分类Dev

通过套接字Android / Java接收文件时出错

来自分类Dev

通过套接字Android / Java接收文件时出错

来自分类Dev

Android:在ExpandableListView中接收ID onItemLongClickListener时出错

来自分类Dev

Android 广播接收器未接收显式广播?

来自分类Dev

从Android中的服务接收广播时出现NULL对象引用错误

来自分类Dev

当应用程序被杀死时,android广播接收器不监听

来自分类Dev

当 SMS 到达 Android oreo 时,如何使用广播接收器获得警报/通知?

来自分类Dev

适用于GCM的Unity Android插件在接收时无法启动服务意图

来自分类Dev

Android:本机代码能否从Android系统获取广播意图?

Related 相关文章

  1. 1

    如何修复在Android中接收广播意图时出错

  2. 2

    Android java.lang.RuntimeException:接收广播意图时出错

  3. 3

    Phonegap android,config.xml错误,接收广播意图时出错

  4. 4

    接收广播意图时出错。Eclipse Paho

  5. 5

    片段中的“接收广播意图时出错”

  6. 6

    接收广播意图时出错。Eclipse Paho

  7. 7

    广播接收器未在android中接收意图数据。

  8. 8

    Android广播接收器未收到意图

  9. 9

    Android:隐式意图与广播接收器

  10. 10

    Android:隐式意图与广播接收器

  11. 11

    致命异常:main; 接收广播意图时出错

  12. 12

    接收广播Intent时出错{act = android.bluetooth.device.action.FOUND flg = 0x10}

  13. 13

    Android广播接收器,每次应用启动时都会接收广播

  14. 14

    手机关闭时的Android广播接收器

  15. 15

    在应用关闭时从广播接收器运行任务[Android]

  16. 16

    在Android屏幕关闭时接收事件和意图

  17. 17

    当子活动的接收者在Android中注册时,如何防止超级活动的广播接收者接收广播消息

  18. 18

    Wifi广播android内部的android意图

  19. 19

    Wifi广播android内部的android意图

  20. 20

    接收广播意图时,在BroadcastReceiver中获取ListView错误

  21. 21

    通过套接字Android / Java接收文件时出错

  22. 22

    通过套接字Android / Java接收文件时出错

  23. 23

    Android:在ExpandableListView中接收ID onItemLongClickListener时出错

  24. 24

    Android 广播接收器未接收显式广播?

  25. 25

    从Android中的服务接收广播时出现NULL对象引用错误

  26. 26

    当应用程序被杀死时,android广播接收器不监听

  27. 27

    当 SMS 到达 Android oreo 时,如何使用广播接收器获得警报/通知?

  28. 28

    适用于GCM的Unity Android插件在接收时无法启动服务意图

  29. 29

    Android:本机代码能否从Android系统获取广播意图?

热门标签

归档