0

在我所见的任何地方,他们都使用带有 onClick 的线程。现在我有点被迫使用线程,因为我无法在其主线程上执行网络操作,如文档所述。那么我如何将线程放在我编写过这样的代码的按钮上?

public void firstbutton(View view) 
{
//some code
}

谢谢您的帮助!

编辑:

        public void firstbutton(View view) 
    {
        InputMethodManager inputMgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        EditText editText = (EditText)findViewById(R.id.editText1);
        inputMgr.hideSoftInputFromWindow(editText.getWindowToken(), 0);

        EditText idnumber=(EditText)findViewById(R.id.editText1);
        String idnumber2= idnumber.getText().toString();
        int i = Integer.parseInt(editText.getText().toString());
        idnum=i;
        setContentView(R.layout.viewer);
        Context context = view.getContext();
        Drawable image = ImageOperations(context, WEB ADDRESS HIDDEN FOR PRIVACY"+idnumber2);
        ImageView icon = new ImageView(context);
        icon = (ImageView)findViewById(R.id.imageView1);
        icon.setImageDrawable(image);
};


public Drawable ImageOperations(Context ctx, String url) {
    try {
        InputStream is = (InputStream) this.fetch(url);
        Drawable d = Drawable.createFromStream(is, "src");
        return d;
    } catch (MalformedURLException e) {
        e.printStackTrace();
        return null;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

public Object fetch(String address) throws MalformedURLException,IOException
{
URL url = new URL(address);
Object content = url.getContent();
return content;
}
4

2 回答 2

1

这取决于您想要达到的目标。

如果您只想为您的网络内容启动一个新线程,您可以使用如下Thread方法:

public void firstbutton(View view) 
{
    new Thread() {
        @Override
        public void run() {
            // Do your network stuff
        }
    }.start();
}

如果您需要在网络操作完成后更新 UI,AsyncTask可能是更好的选择:

    new AsyncTask<Void,Void,ResultType>() {
        @Override
        protected ResultType doInBackground(Void... params) {
            // Do network stuff
            return someResult;
        }

        protected void onPostExecute(ResultType result) {
            // Update UI with your result
        };
    };
于 2012-11-19T14:55:25.430 回答
0

好吧,与在 onClick() 方法中执行的方式完全相同。

我假设(如果我错了,请告诉我)firstbutton()单击按钮时会调用您的方法(因此我由 onClick() 运行)

做,你可以写:

public void firstbutton(View view) {
   new Thread(new Runnable() {
       public void run() {
            // Do your network stuff
     }).start();
}

(或者你也可以像往常一样使用 AsyncTask 类......)

于 2012-11-19T14:57:33.333 回答