使用IMEI作为JSON服务参数 [英] Using IMEI as a parameter for JSON Service

查看:331
本文介绍了使用IMEI作为JSON服务参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

抓的AsyncTask后,我遇到了另一个颠簸的道路。使用JSON(它连接到我的本地SQLServer的,我想检索使用的IMEI作为字符串参数的对象。我已经设置断点以我的AsyncTask调用,它只是崩溃,甚至没有走过,每个手机的IMEI是存储在我的数据库。

我实现我的设备上运行它的希望以下AsyncTask的,而不是在模拟器。

我怀疑这可能与我的设备,既是我的网络服务是我的电脑上运行。我也改变了代理和端口在我的APN设置为我服务的URI一致,但它仍然没有回应,甚至。

  TelephonyManager telephonyManager =(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
        IMEI = telephonyManager.getDeviceId();
        新loadDevice()执行(IMEI);

这是从我的onCreate方法的code片段。

下面是AsyncTask的类:

  //的AsyncTask从设备加载GET ManifestID
    公共类loadDevice扩展的AsyncTask<字符串,字符串,舱单>
    {
        私人ProgressDialog progressDialog =新ProgressDialog(MainActivity.this);
        为InputStream的InputStream = NULL;
        串theString =;
        StringBuilder的建设者;        在preExecute保护无效()
        {
            progressDialog.setMessage(获取分配清单......);
            progressDialog.show();
            progressDialog.setOnCancelListener(新OnCancelListener()
            {
                公共无效onCancel(DialogInterface为arg0)
                {
                    loadDevice.this.cancel(真);
                }
            });
        }        @覆盖
        保护舱单doInBackground(字符串...为arg0)
        {
            尝试
            {
                // HTTP GET请求
                HTTPGET请求=新HTTPGET(CentralURI +/ loadDevice /+ IMEI);
                //设置hedear得到JSON格式的数据
                request.setHeader(接受,应用/ JSON);
                request.setHeader(内容类型,应用/ JSON);                DefaultHttpClient客户端=新DefaultHttpClient();                //得到响应
                HTT presponse响应= client.execute(请求);
                HttpEntity实体= response.getEntity();                //读取内容
                InputStream为= entity.getContent();
                读者的BufferedReader =新的BufferedReader(新的InputStreamReader(是));                建设者=新的StringBuilder();
                串线;
                而((行= reader.readLine())!= NULL)
                {
                    builder.append(线);
                }
                is.close();
                theString = builder.toString();                JSONObject的manifestJSON =新的JSONObject(theString);
                JSONArray清单= manifestJSON.getJSONArray(loadDeviceResult);                的for(int i = 1; I< manifest.length();我++)
                {
                    JSONObject的manObj = manifest.getJSONObject(I)
                    man.ManifestID = manObj.getInt(OriginalSOGManifestID);
                    man.DeviceManifestID = manObj.getInt(DeviceManifestID);
                    man.IMEI = manObj.getString(IMEI);
                    man.JobType = manObj.getString(preFIX);
                    man.RegNo = manObj.getString(REGNO);
                    man.Complete = manObj.getBoolean(完成);
                    man.DateComplete = manObj.getString(DateComplete);
                }
            }
            赶上(例外五)
            {
                e.printStackTrace();
            }
            返回的人;
        }        保护无效onPostExecute(舱单清单)
        {
            //舱单manifestToGet =新舱单();
            //字符串清单code = manifestToGet.getJobType()+ Integer.toString(manifestToGet.getManifestID());
            //新getManifestItems()执行(清单code)。
        }    }

我的其他AsyncTasks都工作正常。不过,我把这个野兽作为第一个AsyncTask的运行后,其他均未击中。

下面是依赖于是在由第一AsyncTask的检索到的对象的属性的AsyncTask的: -

  //的AsyncTask从每个清单得到ManifestItem
    公共类getManifestItems扩展的AsyncTask<字符串,字符串的ArrayList< ManifestItemObj>>
    {
        私人ProgressDialog progressDialog =新ProgressDialog(MainActivity.this);
        为InputStream的InputStream = NULL;
        串theString =;
        StringBuilder的建设者;        在preExecute保护无效()
        {
            progressDialog.setMessage(加载体现...);
            progressDialog.show();
            progressDialog.setOnCancelListener(新OnCancelListener()
            {
                公共无效onCancel(DialogInterface为arg0)
                {
                    getManifestItems.this.cancel(真);
                }
            });
        }        @覆盖
        保护的ArrayList< ManifestItemObj> doInBackground(字符串... PARAMS)
        {
            舱单分配=人;
            串清单code = assign.getJobType()+ Integer.toString(assign.getManifestID());            尝试
            {
                // HTTP GET请求
                HTTPGET请求=新HTTPGET(POD_URI +/ getJobs /+清单code);
                //设置hedear得到JSON格式的数据
                request.setHeader(接受,应用/ JSON);
                request.setHeader(内容类型,应用/ JSON);                DefaultHttpClient客户端=新DefaultHttpClient();                //得到响应
                HTT presponse响应= client.execute(请求);
                HttpEntity实体= response.getEntity();                //读取内容
                InputStream为= entity.getContent();
                读者的BufferedReader =新的BufferedReader(新的InputStreamReader(是));                建设者=新的StringBuilder();
                串线;
                而((行= reader.readLine())!= NULL){
                                builder.append(线);
                        }
                is.close();
                theString = builder.toString();                JSONObject的jobsJSON =新的JSONObject(theString);                JSONArray工作= jobsJSON.getJSONArray(getJobsResult);               ManifestItemObj miDumb =新ManifestItemObj();
                miDumb.ManifestItemID = -1;
                miDumb.FKID = -1;
                miDumb.JobType = - 请选择;                的for(int i = 1; I< jobs.length();我++)
                {
                    麻省理工学院的JSONObject = jobs.getJSONObject(I)
                    ManifestItemObj MI =新ManifestItemObj();
                    mi.ManifestItemID = mit.getInt(ManifestItemID);
                    mi.JobType = mit.getString(JobType);
                    mi.FKID = mit.getInt(FKID);                    // SHIPTO对象
                    JSONObject的stObj = mit.getJSONObject(SHIPTO);                    SHIPTO STO =新SHIPTO();
                    sto.ShipToId = stObj.getInt(ShipToId);
                    sto.ShipToName = stObj.getString(ShipToName);
                    sto.ShipToAddress1 = stObj.getString(ShipToAddress1);
                    sto.ShipToAddress2 = stObj.getString(ShipToAddress2);
                    sto.ShipToCity = stObj.getString(ShipToCity);
                    sto.ShipToPost code = stObj.getString(ShipToP code);
                    sto.ShipToState = stObj.getString(ShipToState);
                    mi.shipTo = STO;                    jobList.add(MI);
                }
                jobList.add(0,miDumb);
            }
            赶上(例外五)
            {
                e.printStackTrace();
            }
            返回招贤纳才;
        }        保护无效onPostExecute(ArrayList的< ManifestItemObj> MIO)
        {
            ManifestItemAdapter MIA =新ManifestItemAdapter(MainActivity.this,android.R.layout.simple_spinner_item,作业表);
            this.progressDialog.dismiss();
            list_job.setAdapter(MIA);        }
    }

编辑:这里是logcat的。我怀疑按钮被转换为微调。绝对不是我的本意但是这就是它的说法: -

  14 05-03:20:20.603:E /跟踪(797):错误打开跟踪文件:没有这样的文件或目录(2)
05-03 14:20:21.204:D / AndroidRuntime(797):关闭VM
05-03 14:20:21.204:W / dalvikvm(797):主题ID = 1:螺纹未捕获的异常退出(组= 0x40a13300)
05-03 14:20:21.224:E / AndroidRuntime(797):致命异常:主要
05-03 14:20:21.224:E / AndroidRuntime(797):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.signonglass / com.signonglass.MainActivity}:java.lang.ClassCastException:android.widget.Button不能转换为android.widget.Spinner
05-03 14:20:21.224:E / AndroidRuntime(797):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
05-03 14:20:21.224:E / AndroidRuntime(797):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
05-03 14:20:21.224:E / AndroidRuntime(797):在android.app.ActivityThread.access $ 600(ActivityThread.java:130)
05-03 14:20:21.224:E / AndroidRuntime(797):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1195)
05-03 14:20:21.224:E / AndroidRuntime(797):在android.os.Handler.dispatchMessage(Handler.java:99)
05-03 14:20:21.224:E / AndroidRuntime(797):在android.os.Looper.loop(Looper.java:137)
05-03 14:20:21.224:E / AndroidRuntime(797):在android.app.ActivityThread.main(ActivityThread.java:4745)
05-03 14:20:21.224:E / AndroidRuntime(797):在java.lang.reflect.Method.invokeNative(本机方法)
05-03 14:20:21.224:E / AndroidRuntime(797):在java.lang.reflect.Method.invoke(Method.java:511)
05-03 14:20:21.224:E / AndroidRuntime(797):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)
05-03 14:20:21.224:E / AndroidRuntime(797):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-03 14:20:21.224:E / AndroidRuntime(797):在dalvik.system.NativeStart.main(本机方法)
05-03 14:20:21.224:E / AndroidRuntime(797):java.lang.ClassCastException:致android.widget.Button不能转换为android.widget.Spinner
05-03 14:20:21.224:E / AndroidRuntime(797):在com.signonglass.MainActivity.onCreate(MainActivity.java:55)
05-03 14:20:21.224:E / AndroidRuntime(797):在android.app.Activity.performCreate(Activity.java:5008)
05-03 14:20:21.224:E / AndroidRuntime(797):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
05-03 14:20:21.224:E / AndroidRuntime(797):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
05-03 14:20:21.224:E / AndroidRuntime(797):11 ...更多


解决方案

可能是这2个事情之一:


  1. 添加的权限来体现
    <使用许可权的android:NAME =android.permission.READ_PHONE_STATE>(删除后的空间'<')

  2. 您可以宣布在MainActivity布局文件中的按钮,但将它转换为微调,同时启动按钮,反之亦然。

after grasping AsyncTask, I have run into yet another road bump. Using JSON (which connects to my local SQLServer, I would like to retrieve an object using the IMEI as a string parameter. I have set a breakpoint to my AsyncTask call and it just crashes, without even walking through. The IMEI of each mobile is stored in my database.

I implementing the following AsyncTask with the hope of running it on my device, and not on an emulator.

I suspect that it may have to do with my device, as both my web services are running on my PC. I have also changed the proxy and port in my APN settings to coincide with the URI of my service but it still doesn't even respond.

TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
        IMEI = telephonyManager.getDeviceId();
        new loadDevice().execute(IMEI);

This is the code snippet from my OnCreate method.

Here is the AsyncTask class:

//AsyncTask to load get ManifestID from Device
    public class loadDevice extends AsyncTask<String, String, Manifests>
    {
        private ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
        InputStream inputStream = null;
        String theString = "";
        StringBuilder builder;

        protected void onPreExecute()
        {
            progressDialog.setMessage("Getting your assigned Manifest...");
            progressDialog.show();
            progressDialog.setOnCancelListener(new OnCancelListener()
            {
                public void onCancel(DialogInterface arg0)
                {
                    loadDevice.this.cancel(true);
                }
            });
        }

        @Override
        protected Manifests doInBackground(String... arg0)
        {
            try
            {
                //http get request
                HttpGet request = new HttpGet(CentralURI + "/loadDevice/" + IMEI);
                //set the hedear to get the data in JSON format
                request.setHeader("Accept", "application/json");
                request.setHeader("Content-type", "application/json");

                DefaultHttpClient client = new DefaultHttpClient();

                //get the response
                HttpResponse response = client.execute(request);
                HttpEntity entity = response.getEntity();

                //read content
                InputStream is = entity.getContent();
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));

                builder = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null)
                {
                    builder.append(line);
                }
                is.close(); 
                theString = builder.toString();

                JSONObject manifestJSON = new JSONObject(theString);
                JSONArray manifest = manifestJSON.getJSONArray("loadDeviceResult");

                for(int i = 1; i < manifest.length(); i++)
                {
                    JSONObject manObj = manifest.getJSONObject(i);
                    man.ManifestID = manObj.getInt("OriginalSOGManifestID");
                    man.DeviceManifestID = manObj.getInt("DeviceManifestID");
                    man.IMEI = manObj.getString("IMEI");
                    man.JobType = manObj.getString("prefix");
                    man.RegNo = manObj.getString("RegNo");
                    man.Complete = manObj.getBoolean("Complete");
                    man.DateComplete = manObj.getString("DateComplete");
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            return man;
        }

        protected void onPostExecute(Manifests manifest)
        {
            //Manifests manifestToGet = new Manifests();
            //String manifestCode = manifestToGet.getJobType() + Integer.toString(manifestToGet.getManifestID());
            //new getManifestItems().execute(manifestCode);
        }

    }

My other AsyncTasks were working fine. However, after I put this beast in as the first AsyncTask to run, the others were not getting hit.

Here is the AsyncTask that relies on a property that is in the object retrieved by the first AsyncTask:-

//ASyncTask to get ManifestItem from each manifest
    public class getManifestItems extends AsyncTask<String, String, ArrayList<ManifestItemObj>>
    {
        private ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
        InputStream inputStream = null;
        String theString = "";
        StringBuilder builder;

        protected void onPreExecute()
        {
            progressDialog.setMessage("Loading manifests...");
            progressDialog.show();
            progressDialog.setOnCancelListener(new OnCancelListener()
            {
                public void onCancel(DialogInterface arg0)
                {
                    getManifestItems.this.cancel(true);
                }
            });
        }

        @Override
        protected ArrayList<ManifestItemObj> doInBackground(String... params)
        {
            Manifests assign = man;
            String manifestCode = assign.getJobType() + Integer.toString(assign.getManifestID());

            try
            {
                //http get request
                HttpGet request = new HttpGet(POD_URI + "/getJobs/" +  manifestCode);
                //set the hedear to get the data in JSON format
                request.setHeader("Accept", "application/json");
                request.setHeader("Content-type", "application/json");

                DefaultHttpClient client = new DefaultHttpClient();

                //get the response
                HttpResponse response = client.execute(request);
                HttpEntity entity = response.getEntity();

                //read content
                InputStream is = entity.getContent();
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));

                builder = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                                builder.append(line);
                        }
                is.close(); 
                theString = builder.toString();

                JSONObject jobsJSON = new JSONObject(theString);

                JSONArray jobs = jobsJSON.getJSONArray("getJobsResult");

               ManifestItemObj miDumb = new ManifestItemObj();
                miDumb.ManifestItemID = -1;
                miDumb.FKID = -1;
                miDumb.JobType = "--Please Select--";

                for(int i = 1; i < jobs.length(); i++)
                {
                    JSONObject mit = jobs.getJSONObject(i);
                    ManifestItemObj mi = new ManifestItemObj();
                    mi.ManifestItemID = mit.getInt("ManifestItemID");
                    mi.JobType = mit.getString("JobType");
                    mi.FKID = mit.getInt("FKID");

                    //ShipTo object
                    JSONObject stObj = mit.getJSONObject("ShipTo");

                    ShipTo sto = new ShipTo();
                    sto.ShipToId = stObj.getInt("ShipToId");
                    sto.ShipToName = stObj.getString("ShipToName");
                    sto.ShipToAddress1 = stObj.getString("ShipToAddress1");
                    sto.ShipToAddress2 = stObj.getString("ShipToAddress2");
                    sto.ShipToCity = stObj.getString("ShipToCity");
                    sto.ShipToPostcode = stObj.getString("ShipToPCode");
                    sto.ShipToState = stObj.getString("ShipToState");
                    mi.shipTo = sto;

                    jobList.add(mi);
                }
                jobList.add(0, miDumb);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            return jobList;
        }

        protected void onPostExecute(ArrayList<ManifestItemObj> mio)
        {
            ManifestItemAdapter mia = new ManifestItemAdapter(MainActivity.this, android.R.layout.simple_spinner_item, jobList);
            this.progressDialog.dismiss();
            list_job.setAdapter(mia);

        }
    }

EDIT: Here is the logcat. I'm suspecting that the Button is being cast to the Spinner. Definitely not my intention but that's what it's saying:-

05-03 14:20:20.603: E/Trace(797): error opening trace file: No such file or directory (2)
05-03 14:20:21.204: D/AndroidRuntime(797): Shutting down VM
05-03 14:20:21.204: W/dalvikvm(797): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
05-03 14:20:21.224: E/AndroidRuntime(797): FATAL EXCEPTION: main
05-03 14:20:21.224: E/AndroidRuntime(797): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.signonglass/com.signonglass.MainActivity}: java.lang.ClassCastException: android.widget.Button cannot be cast to android.widget.Spinner
05-03 14:20:21.224: E/AndroidRuntime(797):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
05-03 14:20:21.224: E/AndroidRuntime(797):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
05-03 14:20:21.224: E/AndroidRuntime(797):  at android.app.ActivityThread.access$600(ActivityThread.java:130)
05-03 14:20:21.224: E/AndroidRuntime(797):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
05-03 14:20:21.224: E/AndroidRuntime(797):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-03 14:20:21.224: E/AndroidRuntime(797):  at android.os.Looper.loop(Looper.java:137)
05-03 14:20:21.224: E/AndroidRuntime(797):  at android.app.ActivityThread.main(ActivityThread.java:4745)
05-03 14:20:21.224: E/AndroidRuntime(797):  at java.lang.reflect.Method.invokeNative(Native Method)
05-03 14:20:21.224: E/AndroidRuntime(797):  at java.lang.reflect.Method.invoke(Method.java:511)
05-03 14:20:21.224: E/AndroidRuntime(797):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
05-03 14:20:21.224: E/AndroidRuntime(797):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-03 14:20:21.224: E/AndroidRuntime(797):  at dalvik.system.NativeStart.main(Native Method)
05-03 14:20:21.224: E/AndroidRuntime(797): Caused by: java.lang.ClassCastException: android.widget.Button cannot be cast to android.widget.Spinner
05-03 14:20:21.224: E/AndroidRuntime(797):  at com.signonglass.MainActivity.onCreate(MainActivity.java:55)
05-03 14:20:21.224: E/AndroidRuntime(797):  at android.app.Activity.performCreate(Activity.java:5008)
05-03 14:20:21.224: E/AndroidRuntime(797):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
05-03 14:20:21.224: E/AndroidRuntime(797):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
05-03 14:20:21.224: E/AndroidRuntime(797):  ... 11 more

解决方案

Could be one of these 2 things:

  1. Add permission to manifest < uses-permission android:name="android.permission.READ_PHONE_STATE"> (remove space after '<')
  2. You could be declaring a Button in the layout file of the MainActivity but cast it as a Spinner while initiating the Button or vice-versa.

这篇关于使用IMEI作为JSON服务参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆