是否可以在没有onclick的情况下将方法放入线程中?

时间:2012-11-19 14:49:44

标签: android multithreading button

我见过的所有地方,他们都使用onreading和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;
}

2 个答案:

答案 0 :(得分: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
        };
    };

答案 1 :(得分:0)

嗯,就像在onClick()方法中完全一样。

我假设(告诉我,如果我错了)单击按钮时调用firstbutton()方法(因此我通过onClick()运行)

你可以写:

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

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