在活动小部件中显示java类的字符串

在活动小部件中显示java类的字符串,java,android,Java,Android,我有一个android应用程序,它由一个活动和一个扩展AsyncTask的java类组成。因此,我在java类中有一个字符串,名为resFromServer 我想在一个合适的android小部件(如Alertdialog)的消息中显示它 我希望有人帮助我如何从活动中访问该字符串 public class JSONTransmitter extends AsyncTask<JSONObject, JSONObject, JSONObject> { String url = "

我有一个android应用程序,它由一个活动和一个扩展AsyncTask的java类组成。因此,我在java类中有一个字符串,名为resFromServer 我想在一个合适的android小部件(如Alertdialog)的消息中显示它

我希望有人帮助我如何从活动中访问该字符串

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的类?我使用的Eclipse
AsyncCallback
不是一个类,它是来自
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);
    }
}