Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-接收广播意图时出错?_Android_Android Service_Android Broadcastreceiver - Fatal编程技术网

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

Android-接收广播意图时出错?,android,android-service,android-broadcastreceiver,Android,Android Service,Android Broadcastreceiver,我有一个服务,它将Json字符串传递给MainActivity: 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

我有一个
服务
,它将
Json字符串
传递给
MainActivity

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();
            }
        }
    }
}
公共类GetSubjects扩展服务{
字符串URL=”http://webservice.jim.com/YYY/XXXX.asmx";
字符串Webresponse=“是否为空?”;
int scode=1597536485;
字符串结果;
公共最终静态字符串MY\u ACTION=“MY\u ACTION”;
@可空
@凌驾
公共IBinder onBind(意向){
返回null;
}
@凌驾
公共int onStartCommand(最终意图、int标志、最终int startId){
Runnable r=新的Runnable(){
@凌驾
公开募捐{
handleStart(意向,startId);
}
};
螺纹t=新螺纹(r);
t、 start();
返回开始时间不粘;
}
@凌驾
公共空间{
super.ondestory();
}
无效手把手(意向意向,int startId){
试一试{
Params_GetSubjects param=新的Params_GetSubjects(scode);
结果=新建mGetSubjects().execute(param.get();
}捕捉(中断异常e){
e、 printStackTrace();
}捕获(执行例外){
e、 printStackTrace();
}
}
公共类mGetSubjects扩展异步任务{
字符串命名空间=”http://tempuri.org/";
字符串方法\u NAME=“Get”;
字符串SOAP_ACTION=”http://tempuri.org/Get";
@凌驾
受保护字符串doInBackground(Params_GetSubjects…Params){
SoapObject请求=新的SoapObject(名称空间、方法名称);
request.addProperty(“scode”,参数[0].scode);
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(请求);
HttpTransportSE conn=新的HttpTransportSE(URL);
对象对象;
试一试{
连接呼叫(SOAP_动作,信封);
//SoapPrimitive响应=(SoapPrimitive)信封.getResponse();
object=envelope.getResponse();
Webresponse=object.toString();
}捕获(例外e){
e、 printStackTrace();
返回“NULL”;
}最后{
ThreadFinish ThreadFinish=新的ThreadFinish();
threadfinish.start();
返回Webresponse;
}
}
}
公共类ThreadFinish扩展了线程{
@凌驾
公开募捐{
试一试{
意图=新意图();
意图。设置动作(我的动作);
intent.putExtra(“数据传递”,结果);
发送广播(意图);
}捕获(例外e){
e、 printStackTrace();
}最后{
stopSelf();
}
}
}
}
以下是我的主要活动:

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());
                }



        }

    }
}
public类MainActivity扩展了AppCompatActivity{
我的接收器我的接收器;
private RecyclerView.LayoutManager LayoutManager;
专用抽屉式雷达适配器;
私人回收视图mRecyclerView;
列表列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService(新意图(MainActivity.this、GetSubjects.class));
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
开关(id){
案例android.R.id.home:
mDrawerLayout.openDrawer(重力compat.START);
返回true;
案例R.id.action\u设置:
返回true;
}
返回super.onOptionsItemSelected(项目);
}
@凌驾
受保护的void onStart(){
myReceiver=新的myReceiver();
IntentFilter IntentFilter=新的IntentFilter();
intentFilter.addAction(GetSubjects.MY_ACTION);
注册接收者(myReceiver、intentFilter);
super.onStart();
}
@凌驾
受保护的void onStop(){
此。未注册接收人(myReceiver);
super.onStop();
}
私有类MyReceiver扩展了BroadcastReceiver{
@凌驾
公共void onReceive(上下文arg0,意图arg1){
字符串datapassed=arg1.getExtras().getString(“datapassed”);
Log.i(“ASDQWRRYGH”,数据传递);
draweritemList=JsonParser.parseFeed(数据传递);
对于(int i=0;i
这是我的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;
        }
    }
}
公共类JsonParser{
公共静态列表源(字符串内容){
试一试{
JSONObject jsonRootObject=新的JSONObject(内容);
JSONArray JSONArray=jsonRootObject.optJSONArray(“行”);
List draweritemList=new ArrayList();
for(int i=0;i
经常向我提供服务结果,但经常向我提供以下错误,我能做什么


您还有三个