Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
不能';t修复android中的未来任务异常_Android_Json_Multithreading_Android Asynctask_Http Post - Fatal编程技术网

不能';t修复android中的未来任务异常

不能';t修复android中的未来任务异常,android,json,multithreading,android-asynctask,http-post,Android,Json,Multithreading,Android Asynctask,Http Post,我对android编程相当陌生,我正在尝试编写一些代码,包括Httppost、Json、AsyncTask等。我遇到了一个错误,但无法修复 public void onClick(View v) { MainActivity.this.runOnUiThread(new Runnable() { public void run() { RequestLogInFromServer RL = new

我对android编程相当陌生,我正在尝试编写一些代码,包括Httppost、Json、AsyncTask等。我遇到了一个错误,但无法修复

public void onClick(View v) {

            MainActivity.this.runOnUiThread(new Runnable() {

                public void run() {
                    RequestLogInFromServer RL = new RequestLogInFromServer();
                    RL.execute().toString();

                }
            });
        }
    });

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public class RequestLogInFromServer extends
        AsyncTask<Object, Object, Object> {
    TextView txt = (TextView) findViewById(R.id.textView1);
    EditText edt = (EditText) findViewById(R.id.editText1);

    @Override
    protected Object doInBackground(Object... params) {

        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(
                "http://shopstable.turkcell.com.tr/timmenu/getPerosConfig.do");
        httpPost.setHeader("Content-type", "application/json");

        try {

            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity resEntity = response.getEntity();
            is = resEntity.getContent();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
            // strJson = null;
        }
        try {
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(is, "UTF-8"), 8); // iso-8859-1 //
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "/n");
            }
            is.close();
            strJson = sb.toString();
        } catch (Exception e) {

        }

        try {
            if (strJson != null) {
                jObj = new JSONObject(strJson);
                String text = jObj.get("masterPerosActive").toString();
                edt.setText(text);

            } else {
                jObj = null;
            }
        } catch (JSONException e) {
        }
        return "Executed";
    }

原因:android.view.ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。。您正在从非UI线程对UI执行更改。这里至少有一行这样做了(在AsyncTask
doInBackground
中):

既然您使用的是AsyncTask,为什么不在
onPostExecute()
方法中执行UI更改,以便
RequestLogInServer
类将更改为(仅最后一行):

公共类RequestLogInFromServer扩展异步任务{
TextView txt=(TextView)findViewById(R.id.textView1);
EditText edt=(EditText)findViewById(R.id.editText1);
@凌驾
受保护对象doInBackground(对象…参数){
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://shopstable.turkcell.com.tr/timmenu/getPerosConfig.do");
setHeader(“内容类型”、“应用程序/json”);
试一试{
HttpResponse response=httpClient.execute(httpPost);
HttpEntity当前性=response.getEntity();
is=resEntity.getContent();
}捕获(不支持的编码异常e){
e、 printStackTrace();
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
//strJson=null;
}
试一试{
BufferedReader=新的BufferedReader(新的InputStreamReader(即“UTF-8”),8);//iso-8859-1//
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
sb.追加(第+行“/n”);
}
is.close();
strJson=sb.toString();
}捕获(例外e){
}
试一试{
if(strJson!=null){
jObj=新的JSONObject(strJson);
字符串text=jObj.get(“masterPerosActive”).toString();
返回文本;
}否则{
jObj=null;
}
}捕获(JSONException e){
}
返回null;
}
受保护的void onPostExecute(字符串结果){
如果(结果!=null){
edt.setText(结果);
}否则{
//显示出错的消息/标签
}
}
}

我不太明白。我到底该怎么做?我想我必须更改此“AsyncTask”行?因为我们将“onPostExecute(Object result)”更改为“onPostExecute(String result)”,是的,你是对的,我没有注意到:)自己编辑了答案以反映这一点。因此类签名更改为:
公共类RequestLogInFromServer扩展了异步任务
07-22 09:51:36.791: E/AndroidRuntime(13010): FATAL EXCEPTION: AsyncTask #1
07-22 09:51:36.791: E/AndroidRuntime(13010): java.lang.RuntimeException: An error occured while executing doInBackground()
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at java.lang.Thread.run(Thread.java:882)
07-22 09:51:36.791: E/AndroidRuntime(13010): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4634)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:867)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.view.ViewGroup.invalidateChild(ViewGroup.java:4066)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.view.View.invalidate(View.java:10193)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.widget.TextView.invalidateRegion(TextView.java:4375)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.widget.TextView.invalidateCursor(TextView.java:4318)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.widget.TextView.spanChange(TextView.java:7172)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.widget.TextView$ChangeWatcher.onSpanAdded(TextView.java:8759)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.text.SpannableStringBuilder.sendSpanAdded(SpannableStringBuilder.java:979)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:688)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:588)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.text.Selection.setSelection(Selection.java:76)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.text.Selection.setSelection(Selection.java:87)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.text.method.ArrowKeyMovementMethod.initialize(ArrowKeyMovementMethod.java:302)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.widget.TextView.setText(TextView.java:3535)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.widget.TextView.setText(TextView.java:3405)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.widget.EditText.setText(EditText.java:80)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.widget.TextView.setText(TextView.java:3380)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at com.example.test2.MainActivity$RequestLogInFromServer.doInBackground(MainActivity.java:113)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-22 09:51:36.791: E/AndroidRuntime(13010):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-22 09:51:36.791: E/AndroidRuntime(13010):    ... 5 more
07-22 09:51:36.851: W/IInputConnectionWrapper(13010): showStatusIcon on inactive InputConnection
07-22 09:53:22.261: D/ActivityThread(13141): handleResumeActivity now pri:0
07-22 09:53:22.261: D/ActivityThread(13141): handleResumeActivity set pri:0
07-22 09:53:27.531: W/dalvikvm(13141): threadid=11: thread exiting with uncaught exception (group=0x40d9a318)
07-22 09:53:27.561: E/AndroidRuntime(13141): FATAL EXCEPTION: AsyncTask #1
07-22 09:53:27.561: E/AndroidRuntime(13141): java.lang.RuntimeException: An error occured while executing doInBackground()
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at java.lang.Thread.run(Thread.java:882)
07-22 09:53:27.561: E/AndroidRuntime(13141): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4634)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:867)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.view.ViewGroup.invalidateChild(ViewGroup.java:4066)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.view.View.invalidate(View.java:10193)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.widget.TextView.invalidateRegion(TextView.java:4375)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.widget.TextView.invalidateCursor(TextView.java:4318)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.widget.TextView.spanChange(TextView.java:7172)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.widget.TextView$ChangeWatcher.onSpanAdded(TextView.java:8759)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.text.SpannableStringBuilder.sendSpanAdded(SpannableStringBuilder.java:979)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:688)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:588)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.text.Selection.setSelection(Selection.java:76)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.text.Selection.setSelection(Selection.java:87)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.text.method.ArrowKeyMovementMethod.initialize(ArrowKeyMovementMethod.java:302)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.widget.TextView.setText(TextView.java:3535)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.widget.TextView.setText(TextView.java:3405)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.widget.EditText.setText(EditText.java:80)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.widget.TextView.setText(TextView.java:3380)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at com.example.test2.MainActivity$RequestLogInFromServer.doInBackground(MainActivity.java:111)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-22 09:53:27.561: E/AndroidRuntime(13141):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-22 09:53:27.561: E/AndroidRuntime(13141):    ... 5 more
            String text = jObj.get("masterPerosActive").toString();
            edt.setText(text);
public class RequestLogInFromServer extends AsyncTask<Object, Object, String> {
    TextView txt = (TextView) findViewById(R.id.textView1);
    EditText edt = (EditText) findViewById(R.id.editText1);

    @Override
    protected Object doInBackground(Object... params) {

        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("http://shopstable.turkcell.com.tr/timmenu/getPerosConfig.do");
        httpPost.setHeader("Content-type", "application/json");

        try {

            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity resEntity = response.getEntity();
            is = resEntity.getContent();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
            // strJson = null;
        }
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8); // iso-8859-1 //
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "/n");
            }
            is.close();
            strJson = sb.toString();
        } catch (Exception e) {

        }

        try {
            if (strJson != null) {
                jObj = new JSONObject(strJson);
                String text = jObj.get("masterPerosActive").toString();
                return text;

            } else {
                jObj = null;
            }
        } catch (JSONException e) {
        }
        return null;
    }

    protected void onPostExecute(String result) {
         if(result != null) {
             edt.setText(result);
         } else {
             // show a message/label that something went wrong
         }
     }
}