当前位置: 首页 > 知识库问答 >
问题:

Android JSON解析崩溃的应用程序异步任务

糜雪峰
2023-03-14

我正在使用一个JSON解析器从我的JSON文件中读取数据并将其显示在我的应用程序中,我最初使用这段代码创建数组,它工作良好,但现在我已经将它粘贴到一个新的应用程序中,使它从JSON获取数据并将其放到一个不工作的文本字段中。我会在下面贴出代码和错误日志。

package com.example.curtisboylan.myapplication;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;



public class TechnicianProfile extends AppCompatActivity {

    private static String url;
    private String TAG = SearchScreen.class.getSimpleName();
    private ProgressDialog pDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_technician_profile);
        Bundle bundle = getIntent().getExtras();
        String username = bundle.getString("username");
        String userid = bundle.getString("userid");

        setTitle("Technician - " + username);
        url = "http://curtisboylan.me/mygeek/mygeekprofile.php?user=" + userid;

        Log.d("test", url);

        new GetProfile().execute();

    }
    private class GetProfile extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(TechnicianProfile.this);
            pDialog.setMessage("Please Wait..");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url);

            Log.e(TAG, "Response from url: " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    JSONArray contacts = jsonObj.getJSONArray("MyGeek");
                    TextView usernametext;
                    // looping through All Contacts

                        JSONObject c = contacts.getJSONObject(0);
                        usernametext = (TextView) TechnicianProfile.this.findViewById(R.id.abouttext);
                        usernametext.setText(c.getString("name"));
                        // username.add(c.getString("name"));
                        // userid.add(c.getString("id"));
                        // location.add(c.getString("location"));
                        // reviewscore.add(c.getString("reviewscore"));
                        //  price.add(c.getString("price"));
                        // urllist.add(c.getString("url"));




                } catch (final JSONException e) {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG)
                                    .show();
                        }
                    });

                }
            } else {
                Log.e(TAG, "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });

            }

            return null;
        }
    }
}

d/test:http://curtisboylan.me/mygeek/mygeekprofile.php?user=1 e/egl_emulation:tid 2593:eglSurfaceAttrib(1174):错误0x3009(EGL_BAD_MATCH)w/openglrenderer:无法在表面0x91199F00上设置EGL_SWAP_BEHAVIOR,错误=EGL_BAD_MATCH e/egl_emulation:tid 2593:eglSurfaceAttrib(1174):错误0x3009(EGL_BAD_MATCH)w/openglrenderer:无法在表面0x8F2F5000上设置EGL_SWAP_BEHAVIOR,错误=EGL_BAD_MATCH e/searchscreen:响应来自URL:{“MyGeek”:[{“ID”:“1”,“Name”:“Curtis Boylan”,“Location”:“Swords,Co Dublin”,“ReviewScore”:“5.6”,“URL”:“https://sContent-lhr3-1.xx.fbcdn.net/v/T1.0-9/11062691_831452480236559_1123476984274233173_n.jpg?OH=8eb4BB9519A2CD3B96B085146B0AE718&OE=596BBB5F”,“Price”:“30”}]}

            --------- beginning of crash E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
              Process: com.example.curtisboylan.myapplication, PID: 2416
              java.lang.RuntimeException: An error occurred while executing doInBackground()
                  at android.os.AsyncTask$3.done(AsyncTask.java:325)
                  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                  at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                  at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                  at java.lang.Thread.run(Thread.java:761)
               Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the

共有1个答案

胡承载
2023-03-14

您不能在doinbackground中执行任何UI操作。

AsyncTaskOnPostExecute方法中放置与设置文本相关的内容

@Override
protected void onPostExecute(Void aVoid) {

}
 类似资料:
  • 问题内容: 当我尝试访问Flask应用程序时,该应用程序崩溃了。 这类似于this或this。但是,我的设置似乎正确。 flask.cli.NoAppException:提供的文件/路径(服务器)似乎不存在。请确认路径正确。如果应用不在PYTHONPATH上,请确保扩展名为.py 我的环境变量设置正确。 我的服务器文件是y目录中没有任何文件。 我不记得对代码进行任何特殊更改。该错误可能来自哪里?

  • 在以前的代码上,谁医生帮了我 现在,android应用程序在我的手机上运行时崩溃了,这是错误日志 第一个问题是在我用相机扫描二维码后,它不能显示在二维码的结果进入 第二个问题是,我从存储器中选择了一个QRcode图像,然后点击确认,它崩溃了 下面是我认为的问题 类型不匹配:推断的类型是Uri?但乌里是意料之中的 冗余SAM构造函数 'onRequestPermissionsResult(Int,数

  • 我不明白我的问题在哪里。我的应用程序在启动时崩溃与此崩溃日志。 iOS 7.0。2(11A501)报告版本:104 异常类型: 00000020异常代码: 0x0000008badf00d高亮线程: 0 应用特定信息:com.myapps未能及时启动 已用CPU总时间(秒):4.420(用户4.420,系统0.000),10%CPU已用应用程序CPU时间(秒):0.714,2%CPU 线程0:0

  • 注意:在我添加广告之前,我的应用程序运行良好,使用相同的方法 当我试图将adview添加到我的应用程序时,它会使我的应用程序崩溃,所以我删除了它,但仍然给我这个这是logcat 10-12 21:33:19.765 4993-4993/com。fm360。almorfis E/AndroidRuntime:致命异常:主进程:com。fm360。阿尔莫菲斯,PID:4993爪哇。lang.Runti

  • 我正在使用内置于Web View的Android开发浏览器。其中我面临的一个问题是,当我访问http://crashmybrowser.com测试浏览器上的选项卡崩溃时,我的整个浏览器应用程序都会崩溃。但是,当在chrome或Opera上进行相同的测试时,这些浏览器会在崩溃中幸存下来,并且只有特定的选项卡崩溃是由于访问上述网站而预期的结果。有人能帮助理解我如何在使用Webview的浏览器上处理此崩

  • 我正在创建我的第一个Firebase应用程序。它的要求之一是在网络不可用时运行。Firebase指南指出: 启用磁盘持久性允许我们的应用程序即使在重新启动应用程序后也保持其所有状态。我们只需一行代码就可以实现磁盘持久性。FirebaseDatabase。getInstance()。setPersistenceEnabled(true);启用磁盘持久性后,我们的同步数据和写入将在应用程序重新启动时持