android中json解析中的一些错误

android中json解析中的一些错误,android,json,parsing,Android,Json,Parsing,我是android初学者,正在尝试使用json获取pnr状态。这里是我的代码,不起作用,请帮助我。检查控制台时出现一些空异常,它说doinbackground方法中存在一些问题,但不理解它所说的内容。。。 您正在对PNR()中的一些文本视图调用.setText(),然后从doInBackground()调用这些文本视图。setText()是一个UI操作,不允许触摸UI线程 如果要在异步任务中执行某些UI操作,应该在onPreExecute()或onPostExecute()中执行,然后从doI

我是android初学者,正在尝试使用json获取pnr状态。这里是我的代码,不起作用,请帮助我。检查控制台时出现一些空异常,它说doinbackground方法中存在一些问题,但不理解它所说的内容。。。


您正在对
PNR()
中的一些文本视图调用
.setText()
,然后从
doInBackground()调用这些文本视图。setText()
是一个UI操作,不允许触摸UI线程


如果要在异步任务中执行某些UI操作,应该在
onPreExecute()
onPostExecute()
中执行,然后从
doInBackground()调用
.setText()
中的一些文本视图。setText()
是一个UI操作,不允许触摸UI线程


如果你想在异步任务中进行一些UI操作,你应该在
onPreExecute()
onPostExecute()

中进行,请添加stacktrace。从哪里得到错误。我认为你不能从后台设置文本1)你应该得到错误,因为从后台线程而不是从UI更改视图(textView的setText()方法)2)您将无法在texView上获得真实文本,因为调用setText将替换旧文本。3) 尝试使用您需要的字符串发布更新,以便更改textView的文本4)您在PNR函数中调用了setText方法,在DoinBackground中调用了setText方法通过在PNR方法中添加setText,实际上我正在检查执行是否到达那里。现在我发现哪里出错了。。非常感谢您宝贵的时间。请添加stacktrace。您从哪里得到错误。我认为您不能从background设置文本1)您应该得到错误,因为从后台线程而不是从UI更改视图(textView的setText()方法)2)您将无法在texView上获得真实文本,因为调用setText将替换旧文本。3) 尝试使用您需要的字符串发布更新,以便更改textView的文本4)您在PNR函数中调用了setText方法,在DoinBackground中调用了setText方法通过在PNR方法中添加setText,实际上我正在检查执行是否到达那里。现在我发现哪里出错了。。非常感谢你宝贵的时间。
public class Riki extends Activity {
    TextView httpStuff;
    HttpClient client;
    JSONObject json;    
    final static String URL = "http://www.railpnrapi.com/";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.httpexample);
        httpStuff = (TextView) findViewById(R.id.tvHttp);
        client = new DefaultHttpClient();       
        new Read().execute("tnum");
    }

    public JSONObject PNR(String username)
            throws ClientProtocolException, IOException, JSONException {
        StringBuilder url = new StringBuilder(URL);
        url.append(username);

        HttpGet get = new HttpGet(url.toString());
        HttpResponse r = client.execute(get);
        int status = r.getStatusLine().getStatusCode();
        httpStuff.setText(url);
        httpStuff.setText(status);
        if (status == 200) {
            HttpEntity e = r.getEntity();
            String data = EntityUtils.toString(e);
            JSONArray timeline = new JSONArray(data);
            JSONObject last = timeline.getJSONObject(0);
            return last;
        } else {
            Toast.makeText(Riki.this, "error", Toast.LENGTH_SHORT);
            return null;
        }
    }

    public class Read extends AsyncTask<String, Integer, String>{

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            try {
                json = PNR("8506503026");
                return json.getString(params[0]);
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            httpStuff.setText(result);
        }

    }
}
12-06 16:28:48.180: E/AndroidRuntime(2871): FATAL EXCEPTION: AsyncTask #2
12-06 16:28:48.180: E/AndroidRuntime(2871): java.lang.RuntimeException: An error occured while executing doInBackground()
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at java.lang.Thread.run(Thread.java:1019)
12-06 16:28:48.180: E/AndroidRuntime(2871): Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.view.ViewRoot.checkThread(ViewRoot.java:3011)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.view.ViewRoot.requestLayout(ViewRoot.java:630)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.view.View.requestLayout(View.java:8268)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.view.View.requestLayout(View.java:8268)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.view.View.requestLayout(View.java:8268)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.view.View.requestLayout(View.java:8268)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.view.View.requestLayout(View.java:8268)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.widget.ScrollView.requestLayout(ScrollView.java:1289)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.view.View.requestLayout(View.java:8268)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.widget.TextView.checkForRelayout(TextView.java:5547)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.widget.TextView.setText(TextView.java:2730)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.widget.TextView.setText(TextView.java:2598)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.widget.TextView.setText(TextView.java:2573)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at com.example.coder.Riki.PNR(Riki.java:49)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at com.example.coder.Riki$Read.doInBackground(Riki.java:69)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at com.example.coder.Riki$Read.doInBackground(Riki.java:1)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-06 16:28:48.180: E/AndroidRuntime(2871):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)