在活动小部件中显示java类的字符串
我有一个android应用程序,它由一个活动和一个扩展AsyncTask的java类组成。因此,我在java类中有一个字符串,名为resFromServer 我想在一个合适的android小部件(如Alertdialog)的消息中显示它 我希望有人帮助我如何从活动中访问该字符串在活动小部件中显示java类的字符串,java,android,Java,Android,我有一个android应用程序,它由一个活动和一个扩展AsyncTask的java类组成。因此,我在java类中有一个字符串,名为resFromServer 我想在一个合适的android小部件(如Alertdialog)的消息中显示它 我希望有人帮助我如何从活动中访问该字符串 public class JSONTransmitter extends AsyncTask<JSONObject, JSONObject, JSONObject> { String url = "
public class JSONTransmitter extends AsyncTask<JSONObject, JSONObject, JSONObject> {
String url = "http://192.168.1.8:89/Derdeery/b.php";
protected JSONObject doInBackground(JSONObject... data) {
JSONObject json = data[0];
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 100000);
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitNetwork().build());
JSONObject jsonResponse = null;
HttpPost post = new HttpPost(url);
try {
StringEntity se = new StringEntity("json="+json.toString());
post.addHeader("content-type", "application/x-www-form-urlencoded");
post.setEntity(se);
HttpResponse response;
response = client.execute(post);
String resFromServer = org.apache.http.util.EntityUtils.toString(response.getEntity());
Log.i("Response from server", **resFromServer**);
}
catch (Exception e)
{ e.printStackTrace();}
return jsonResponse;
}
}
将活动作为参数传递给
异步任务
类构造函数:
class MyAsyncTask extends AsyncTask<URL, Integer, Long> {
Activity mActivity;
public MyAsyncTask(Activity activity) {
mActivity = ativity;
}
您不应使用doInBackground
方法来更新活动。
使用
onPostExecute
,因为它使用主线程。正确的解决方案:创建异步任务的实例
,并进行回调,以便将响应捕获到任何活动
。将实现此接口的所有活动都可以检索异步任务的结果。这更灵活,可以由多个活动使用,只需一个异步任务
您必须在异步任务
中创建实例并返回字符串
响应:
public class JSONTransmitter extends AsyncTask<JSONObject, Void, String> {
private AsyncCallback asyncCallback; // callback variable
// constructor
public JSONTransmitter(Context context) {
// attach the callback to any context
asyncCallback = (AsyncCallback) context;
}
// create the interface
public static interface AsyncCallback {
void onResponse(String res);
}
...
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (asyncCallback != null) {
// call the onResponse method for callback
asyncCallback.onResponse(result);
}
}
}
因此,您可以使用AsyncTask
类中的resFromServer
(结果字符串)在活动中执行所需操作。我收到此错误AsyncCallback无法解析为类型我没有任何错误,@JavaFan。由于您的AsyncTask类型(AsyncTask
),我必须通过JSONObject
更改返回的字符串,否则我可以运行脚本。是否使用Eclispe?是否有一个名为AsyncCallback的类?我使用的EclipseAsyncCallback
不是一个类,它是来自JSONTransmitter
的接口。检查您的导入,这通常是问题所在。如果没有,则清理并重建(Eclispe在重新生成类时可能会遇到一些问题);AsyncTask类型中的onPostExecute(JSONObject)方法不适用于参数(字符串)
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
int id = mActivity.findViewById(...);
}
public class JSONTransmitter extends AsyncTask<JSONObject, Void, String> {
private AsyncCallback asyncCallback; // callback variable
// constructor
public JSONTransmitter(Context context) {
// attach the callback to any context
asyncCallback = (AsyncCallback) context;
}
// create the interface
public static interface AsyncCallback {
void onResponse(String res);
}
...
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (asyncCallback != null) {
// call the onResponse method for callback
asyncCallback.onResponse(result);
}
}
}
public class MainActivity extends Activity implements JSONTransmitter.AsyncCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// set the Context to the AsyncTask when you create it
// in order to return here and execute the request
new JSONTransmitter(this).execute(...);
}
...
@Override
public void onResponse(String res) {
// handle the string response when it's called from onPostExecute()
Log.v("From_MainActivity", "AsyncTask returns this: "+res);
}
}