我见过的所有地方,他们都使用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;
}
答案 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类......)