从onpostexecute到mainactivity的字符串数组

时间:2014-09-30 19:43:08

标签: android arrays listview

我已经有一段时间了,我有一个问题:

此时我能够:

1 - 使用我的数据库中的数据制作自定义列表视图 - 此部分已完成。 2 - 使用搜索过滤器制作自定义列表视图。

所以,我现在尝试使用搜索过滤器制作自定义列表视图。

事情是,我努力奋斗,而且我没有太多时间,而且我发现的唯一解决方案是:

在onPostExecute上,我运行以下代码:

  for(int i=0; i<jsonArray.length();i++){
            JSONObject json = null;
            try {
                json = jsonArray.getJSONObject(i);

                listId.add(json.getString("id"));
                listNome.add(json.getString("name"));
                listTipo.add(json.getString("type"));
          } catch (JSONException e) {
                e.printStackTrace();
            }



        }

        String[] arrId = listId.toArray(new String[listId.size()]);//StringArray de ID's
        String[] arrName = listNome.toArray(new String[listName.size()]); // 
        String[] arrType = listTipo.toArray(new String[listType.size()]);

        tvJson.setText(Arrays.toString(arrName)); 

        Intent i = new Intent (MainActivity.this, NextActivity.class);
        i.putExtra("KEY_ID", arrId);
        i.putExtra("KEY_TIPO", arrTipo);
        i.putExtra("KEY_NOME", arrNome);
        startActivity(i);   

    }

正如您所看到的,这不是一个完美的解决方案,但我需要这些字符串数组来制作我的自定义列表视图。

如果我将它们放在NextActivity上我的所有代码都运行顺利,那就是,我不想开始一个活动,我想把这个数组放到Main Activity中,之后构建我的listview。

那么,有什么方法可以将这3个字符串[]发送给MainActivity吗?

PS:它不是有史以来最优雅的代码,但我是新手,我有一个项目的最后期限 - 这是我不尝试的主要原因重写所有这些代码。

1 个答案:

答案 0 :(得分:0)

关于广播,您需要设置您的活动以准备接收广播。将其添加到您的MainActivity:

private SimpleBroadcastReceiver mReceiver;

@Override
public void onResume(){
    super.onResume();
    mReceiver = new SimpleBroadcastReceiver();
    registerReceiver(mReceiver, new IntentFilter("com.your_package.package.SOME_KEY"));
}

@Override
public void onPause(){
    super.onPause();
    unregisterReceiver(mReceiver);
}

public class SimpleBroadcastReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
         // Get your intent extras like you were doing in your new activity
    }
}

现在,您的MainActivity已准备好接收广播,并针对操作"com.your_package.package.SOME_KEY"进行过滤。现在您只需要从onPostExecute()发送广播。但是,要执行此操作,您需要访问应用程序上下文。为此,您可以为AsyncTask类创建一个构造函数,该构造函数获取上下文作为其参数

public class MyAsyncTask extends AsyncTask<Void, Void, Void>{

    private Context context;

    public MyAsyncTask(Context context){
         this.context = context;
    }
}

您现在可以从Activity中利用此AsyncTask,如下所示

new MyAsyncTask(this).execute();

现在您可以访问您的上下文,您可以按如下方式完成onPostExecute()

//in onPostExecute instead of starting your new activity
Intent i = new Intent("com.your_package.package.SOME_KEY");
context.sendBroadcast(i);

显然,这需要进行一些修改以适应你正在做的事情,但这是一般的想法。