本文介绍了土司AsyncTask的非活动类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个包含调用一个URL的AsyncTask的非活动类。
如果连接超时因为某些原因,我希望让用户知道这张贴敬酒。
但我就是不能让任何上下文。
如何achive呢?
RPIcall.class
进口android.os.AsyncTask;
进口android.util.Log;进口org.apache.http.Htt presponse;
进口org.apache.http.client.ClientProtocolException;
进口org.apache.http.client.methods.HttpGet;
进口org.apache.http.conn.HttpHostConnectException;
进口org.apache.http.impl.client.DefaultHttpClient;
进口org.apache.http.params.BasicHttpParams;
进口org.apache.http.params.HttpConnectionParams;
进口org.apache.http.params.HttpParams;进口java.io.IOException异常;类RPicall扩展的AsyncTask<字符串,字符串,太虚> { @覆盖
保护无效doInBackground(字符串... URI){ INT timeoutSocket = 3000;
INT timeoutConnection = 3000; 尝试{ Log.v(电话网址:URI [0]); HTTPGET HTTPGET =新HTTPGET(URI [0]);
的HttpParams httpParameters =新BasicHttpParams();
//直到建立连接以毫秒为单位设置超时。
//默认值是零,这意味着未使用的超时。 HttpConnectionParams.setConnectionTimeout(httpParameters,timeoutConnection);
//设置默认的套接字超时(SO_TIMEOUT)
//毫秒是用于等待数据的超时。 HttpConnectionParams.setSoTimeout(httpParameters,timeoutSocket); DefaultHttpClient的HttpClient =新DefaultHttpClient(httpParameters);
HTT presponse响应= httpClient.execute(HTTPGET); }赶上(ClientProtocolException E){
//这里连接超时excepion
//Toast.makeText(你的连接已逾时,Toast.LENGTH_SHORT).show();
Log.v(服务器不可达,URI [0]);
publishProgress(超时); }赶上(HttpHostConnectException E){ Log.e(服务器不可达,URI [0]); } 赶上(IOException异常五){
e.printStackTrace();
}
返回null;
} @覆盖
保护无效onPostExecute(虚空结果){
super.onPostExecute(结果);
字符串测试=测试;
Log.v(完了,测试); }
}
解决方案
步骤1:构造函数添加到 RPicall
,需要一个上下文
,将其存储在数据成员。
第2步:使用上下文
在 onPostExecute()
来显示你的吐司
。
第三步:通过在合适的上下文
当你创建一个实例 RPicall
I have a non Activity class which contains an AsyncTask which calls an URL.If the Connection Timeouts for some reasons, I want to let the user know this by posting a Toast.But I just can't get any Context.
How can achive this?
RPIcall.class
import android.os.AsyncTask;
import android.util.Log;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.HttpHostConnectException;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import java.io.IOException;
class RPicall extends AsyncTask<String, String, Void> {
@Override
protected Void doInBackground(String... uri) {
int timeoutSocket = 3000;
int timeoutConnection = 3000;
try{
Log.v("call URL: ", uri[0]);
HttpGet httpGet = new HttpGet(uri[0]);
HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds until a connection is established.
// The default value is zero, that means the timeout is not used.
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds which is the timeout for waiting for data.
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpResponse response = httpClient.execute(httpGet);
} catch (ClientProtocolException e) {
//Here Connection TimeOut excepion
//Toast.makeText(, "Your connection timedout", Toast.LENGTH_SHORT).show();
Log.v("Server not Reachable: ", uri[0]);
publishProgress("TimeOut");
} catch (HttpHostConnectException e) {
Log.e("Server not Reachable: ", uri[0]);
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
String test = "test";
Log.v("finished: ", test);
}
}
解决方案
Step #1: Add a constructor to RPicall
that takes a Context
, storing it in a data member.
Step #2: Use that Context
in onPostExecute()
to display your Toast
.
Step #3: Pass in a suitable Context
when you create an instance of RPicall
.
这篇关于土司AsyncTask的非活动类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!