Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java asynctask中的android更新自定义视图_Java_Android_View_Android Asynctask - Fatal编程技术网

Java asynctask中的android更新自定义视图

Java asynctask中的android更新自定义视图,java,android,view,android-asynctask,Java,Android,View,Android Asynctask,好的,我有一个从互联网上播放GIF的自定义视图。因此,我需要在我的视图中添加一个url来下载gif。但是我似乎无法在我的异步任务中更新我的自定义视图。我需要将url字符串添加到我的自定义视图gifView.setUrl()。它在onCreate类中工作,但在asynctask中为空 Oncreate类 GifView gifView; @Override public void onCreate(Bundle savedInstanceState) {

好的,我有一个从互联网上播放GIF的自定义视图。因此,我需要在我的视图中添加一个url来下载gif。但是我似乎无法在我的
异步任务中更新我的自定义视图。我需要将url字符串添加到我的自定义视图
gifView.setUrl()
。它在onCreate类中工作,但在asynctask中为空

Oncreate类

    GifView gifView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Bundle extras = getIntent().getExtras();
        id = extras.getInt("id");
        String idStr = String.valueOf(id);

        String extension = extras.getString("extension");
        if(extension.equals(".gif")){
            setContentView(R.layout.activity_post_gif);
            Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            gifView = (GifView)findViewById(R.id.gifview);
            titleStr = (TextView)findViewById(R.id.titleTXT);
            postInfo = (TextView)findViewById(R.id.infoTXT);

            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowTitleEnabled(false);

//the url
            new getJsonInfoGif().execute("http://www.website.com/jsonApi");
        }else{
异步任务

public class getJsonInfoGif extends AsyncTask<String, Void, String>{

    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog(context);
        progressDialog.setMessage("loading post...");
        progressDialog.show();
    }

    @Override
    protected String doInBackground(String... strings) {
        return GET(strings[0]);
    }

    @Override
    protected void onPostExecute(String res) {
        try {
            JSONObject jsonObject = new JSONObject("{'postinfo':[" + res + "]}");
            JSONArray jsonArray = jsonObject.getJSONArray("postinfo");
            JSONObject obj = jsonArray.getJSONObject(0);
            //post title
            titleStr.setText(obj.getString("name"));
            //category and maker full name
            //large image
            JSONObject imgObj = obj.getJSONObject("thumbnails");
            gifView.setUrl("http://www.website.com/my.gif");

        } catch (JSONException e) {
            e.printStackTrace();
        }
        if (progressDialog != null) {
            progressDialog.dismiss();
        }
    }
}
这是url中的日志,如果我在活动中的asynctask中添加url,它将为null

11-07 14:41:58.821    5674-6076/svenmobile.tools.showcase D/DEBUG﹕ URLnull
我想知道的是问题是什么,如果可能的话如何解决。
提前感谢,Sven

也许您在
setUrl()
之前调用了
init()

您可以在构造函数中向它传递url,或者
public void init(最终上下文,字符串urlStr)抛出IOException{


我还建议您将所有网络代码移动到AsyncTask的doInBackground方法中的
doInBackground

,返回GET(String)方法的是什么?为什么不简单地执行“returnstrings[0]”?因为我需要解析json数据
11-07 14:41:58.821    5674-6076/svenmobile.tools.showcase D/DEBUG﹕ URLnull