【问题标题】:AsyncTask Fatal Error #1AsyncTask 致命错误 #1
【发布时间】:2017-05-23 17:05:24
【问题描述】:

运行此代码时发生异步致命错误。

我正在制作一个应用程序,它将像 Team viewer 一样控制远程计算机。

package pk.edu.cust.fyp.nobeen.sameer.umair.pccontroller;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class MainActivity extends AppCompatActivity {


    Button connectBtn;
    EditText ipAddressEditTxt;
    String ipAddress;
    int port=4444;
    boolean connectionResult = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        connectBtn = (Button) findViewById(R.id.connect);
        ipAddressEditTxt = (EditText) findViewById(R.id.ipEditText);
        ipAddress = ipAddressEditTxt.getText().toString();


        connectBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {             
                ClientConnection clientConnection = new ClientConnection();
              clientConnection.execute(ipAddress);
              if(connectionResult == true) {

                  Toast.makeText(getApplicationContext(),"Success", Toast.LENGTH_SHORT).show();

                  Intent intent;
                    intent = new Intent(MainActivity.this, Login.class);
                    startActivity(intent);

                }
                else
                    Toast.makeText(getApplicationContext(),"Connection Failed",Toast.LENGTH_SHORT).show();
            }
        });

    }
     class ClientConnection extends AsyncTask <String,String,String>
    {
        Socket socket;
        DataInputStream dataInputStream;
        DataOutputStream dataOutputStream;
        Context context;
        String TAG ="Client Connection";

        @Override
        protected String doInBackground(String... params) {
            Toast.makeText(getApplicationContext(),"doInBackground run", Toast.LENGTH_SHORT).show();

            try {

                socket = new Socket(params.toString(), port);

                dataInputStream = new DataInputStream(socket.getInputStream());
                dataOutputStream = new DataOutputStream(socket.getOutputStream());
                Toast.makeText(getApplicationContext(),"Connection is succesfully "+dataInputStream.readUTF(),Toast.LENGTH_SHORT).show();
                if(socket.isConnected())
                {
                    connectionResult=true;
                }
            }catch (Exception ex)
            {
                Toast.makeText(getApplicationContext(),"Exception occur: "+ex,Toast.LENGTH_SHORT).show();
                //Log.e(TAG,ex.toString());
                connectionResult = false;
            }
            return null;
        }
        protected  void onPreExecute()
        {
          super.onPreExecute();
        }
        protected void onPostExecute(String s){
            Toast.makeText(getApplicationContext(),"OnPost"+connectionResult,Toast.LENGTH_SHORT).show();
            //super.onPostExecute(s);
        }
    }

   }

【问题讨论】:

标签: java android sockets android-asynctask


【解决方案1】:

问题:您在后台显示 Toast,但未运行 UI 线程。从 doInBackground() 方法中删除两个 Toast 消息

如果您想显示 toast,请在 onPreExecute() 和 onPostExecute() 方法中显示它们,因为它们是在 UI 线程中调用的,但 doInBackground() 是在单独的线程中调用的。

【讨论】:

  • 阿里,我建议对您的错误答案进行编辑,但您对其进行了审核并拒绝了它,而不是接受编辑良好的答案。您之前回答过“您正在后台显示运行 UI 线程的 Toast”,这是错误的,因为在后台它没有在 UI 线程上运行。感谢人们试图帮助你,而不是无缘无故地拒绝建议。
  • 如果您不想让别人编辑,下次再校对您的答案。
  • 在您提出修改建议之前,已修改答案。你仍然希望你的建议被接受吗?反对票没有问题,但我不会批准无论如何都没有帮助的事情。
  • 这不是真的,因为我的建议显示在您的编辑之前,而拒绝编辑建议的人是您。继续前进,伙计。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
相关资源
最近更新 更多