【问题标题】:Accessing the json response from another activty从另一个活动访问 json 响应
【发布时间】:2015-04-02 07:00:04
【问题描述】:

我有一个片段,我正在访问片段中 onCreate() 内的 API,然后我得到对同一片段类的 json 响应(从 AsyncTask 类中的 onPostExecute() 返回)。现在我在onTaskCompleted() 中收到json 响应,如下所示,

@Override
    public void onTaskCompleted(JSONArray responseJson) {
        try {
            for (int i = 0; i < responseJson.length(); ++i) {
                final JSONObject object = responseJson.getJSONObject(i);
                ...

我的问题是我有一个活动,我想将这些数据用于该活动。如何访问这些数据?

我可以做类似的事情吗,

mdata = fragment.onTaskCompleted();

任何帮助将不胜感激。

更新

activity和fragment之间没有直接联系。因为我没有使用意图。片段是菜单,我正在那里加载数据。活动用于搜索。我正在尝试将已加载的数据用于搜索活动。

【问题讨论】:

  • 你可以使用@Fahim给出的答案

标签: android json android-fragments android-activity android-asynctask


【解决方案1】:

您可以通过不同的方式做到这一点 1)您可以读取 json 数据并将其存储在哈希映射中并将其传递给该活动。 2)您可以使用意图将相同的json字符串传递给其他活动并从那里读取json数据。 3)您可以将 Json 字符串存储在项目的静态字符串变量中,并可以在 Activity 中访问相同的字符串(这对关键应用程序不公平,但很容易)

喜欢

创建一个类 Constantss.java 并声明

公共静态字符串 myjson="";

然后在你的课堂上 onTaskcomplete

@Override
    public void onTaskCompleted(JSONArray responseJson) {
        try {

 Constantss. myjson=responseJson.toString();
            for (int i = 0; i < responseJson.length(); ++i) {
                final JSONObject object = responseJson.getJSONObject(i);
....
}

内部片段

String js;
if(Constantss.myjson.length()>0)
 js=Constantss.myjson; //this is the json string convert i to jsonarray and use

【讨论】:

  • 你能告诉我如何使用第三个选项吗,请提供一些代码级别的帮助
  • Karthika PB 你能告诉我我想在里面有什么活动和片段
  • js下报错,Jsonstrings无法解析为类型
  • 抱歉不是 Jsonstring 而是字符串。你需要将它转换为 jsonarray 或者直接查看我的编辑...
【解决方案2】:

您可以简单地将整个 JSONObject 作为字符串。像这样的:

i.putString("product", jsonObj.toString);

然后你可以在 SecondtActivity 中

JSONObject jsonObj = new JSONObject(getIntent().getStringExtra("product"));

【讨论】:

  • 如何将数据从片段发送到活动?没有直接联系,因为我没有使用意图。片段是菜单,我正在那里加载数据。 Activity 用于搜索。
【解决方案3】:

您可以使用接口将数据从 Fragment 传递到 Activity,这是一个非常简单的示例 -

public class Fragment2 extends Fragment {

  public interface onSomeEventListener {
    public void someEvent(String s);
  }

  onSomeEventListener someEventListener;

  @Override
  public void onAttach(Activity activity) {
    super.onAttach(activity);
        try {
          someEventListener = (onSomeEventListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement onSomeEventListener");
        }
  }

  final String LOG_TAG = "myLogs";

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment2, null);

    Button button = (Button) v.findViewById(R.id.button);
    button.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
        someEventListener.someEvent("Test text to Fragment1");
      }
    });

    return v;
  }
}

在您的活动中 -

    public class MainActivity extends Activity implements onSomeEventListener{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Fragment frag2 = new Fragment2();
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.add(R.id.fragment2, frag2);
        ft.commit();
    }

  @Override
  public void someEvent(String s) {
      Fragment frag1 = getFragmentManager().findFragmentById(R.id.fragment1);
      ((TextView)frag1.getView().findViewById(R.id.textView)).setText("Text from Fragment 2:" + s);
  }
}

希望这会有所帮助:)

【讨论】:

  • 非常感谢您的回答我能够以不同的方式实现这一目标
【解决方案4】:

您可以将一个片段与其所有者 Activity 定义通信并与侦听器接口,在 Activity 上实现此接口,并从片段中调用侦听器,正如官方文档中所建议的那样:Communicating with Other Fragments

对我来说另一个不错的选择是使用像 greenrobot/EventBus 这样的事件总线

【讨论】:

    【解决方案5】:

    如果你不打算使用这个json数据,你可以不处理。如果需要,您只需将 String 中的这个 json 传递给处理这些数据的第二个 Activity。
    所以,代码可能是这样的:

    @Override
    public void onTaskCompleted(JSONArray responseJson) {
        if( responsejson != null ){
            String json = responsejson.toString();
            Intent intent = new Intent(getActivity(), SecondActivity.class);
            intent.putExtra("json", json);
            startActivity(intent);
    


    而在第二个Activity中,你只需要将jsonString再次转换为Json数据,可能是这样的:

    String json = getIntent().getString("json");
    JsonArray jsonArray = new JsonArray(json);
    try {
        for (int i = 0; i < jsonArray.length(); ++i) {
            final JSONObject object = jsonArray.getJSONObject(i);
            ...
    

    【讨论】:

    • 非常感谢您的回答我能够以不同的方式实现这一目标
    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    相关资源
    最近更新 更多