从另一个活动访问 json 响应
Accessing the json response from another activty
我有一个片段,我正在访问片段中 onCreate()
内的 API,然后我得到对同一片段 [=37] 的 json 响应=](从 AsyncTask
class 中的 onPostExecute()
返回)。现在我在 onTaskCompleted()
中收到 json 响应,如下所示,
@Override
public void onTaskCompleted(JSONArray responseJson) {
try {
for (int i = 0; i < responseJson.length(); ++i) {
final JSONObject object = responseJson.getJSONObject(i);
...
我的问题是我有一个 activity,我想将这些数据获取到那个 activity。我如何访问这些数据?
我可以做类似的事情吗,
mdata = fragment.onTaskCompleted();
如有任何帮助,我们将不胜感激。
已更新
activity 和片段之间没有直接联系。因为我没有使用意图。 Fragment 是菜单,我正在那里加载数据。 Activity 用于搜索。我正在尝试获取已加载的数据以搜索 activity.
您可以简单地将整个 JSONObject 作为一个字符串。像这样:
i.putString("product", jsonObj.toString);
然后在 SecondtActivity 中你可以
JSONObject jsonObj = new JSONObject(getIntent().getStringExtra("product"));
您可以使用接口将数据从 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;
}
}
在你的 Activity 里面 -
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);
}
}
希望这对您有所帮助:)
你可以用不同的方式做到这一点
1) 您可以读取 json 数据并将其存储在哈希映射中并将其传递给 activity。
2) 您可以使用意图将相同的 json 字符串传递给其他 activity 并从那里读取 json 的数据。
3) 您可以将 Json 字符串存储在项目的静态字符串变量中,并可以在 activity 中访问相同的字符串(这对关键应用程序不公平,但很容易)
喜欢
创建一个 class Constantss.java 并声明
public 静态字符串我的json="";
然后在你的 class 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
您可以将一个片段与其所有者进行通信 activity 定义一个侦听器并与之交互,在 activity 上实现此接口,并从片段中调用侦听器,正如在官方文档:Communicating with Other Fragments
对我来说另一个不错的选择是使用像 greenrobot/EventBus
这样的事件总线
如果你不打算使用这个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中,只需要将json
字符串再次转换为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);
...
我有一个片段,我正在访问片段中 onCreate()
内的 API,然后我得到对同一片段 [=37] 的 json 响应=](从 AsyncTask
class 中的 onPostExecute()
返回)。现在我在 onTaskCompleted()
中收到 json 响应,如下所示,
@Override
public void onTaskCompleted(JSONArray responseJson) {
try {
for (int i = 0; i < responseJson.length(); ++i) {
final JSONObject object = responseJson.getJSONObject(i);
...
我的问题是我有一个 activity,我想将这些数据获取到那个 activity。我如何访问这些数据?
我可以做类似的事情吗,
mdata = fragment.onTaskCompleted();
如有任何帮助,我们将不胜感激。
已更新
activity 和片段之间没有直接联系。因为我没有使用意图。 Fragment 是菜单,我正在那里加载数据。 Activity 用于搜索。我正在尝试获取已加载的数据以搜索 activity.
您可以简单地将整个 JSONObject 作为一个字符串。像这样:
i.putString("product", jsonObj.toString);
然后在 SecondtActivity 中你可以
JSONObject jsonObj = new JSONObject(getIntent().getStringExtra("product"));
您可以使用接口将数据从 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;
}
}
在你的 Activity 里面 -
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);
}
}
希望这对您有所帮助:)
你可以用不同的方式做到这一点 1) 您可以读取 json 数据并将其存储在哈希映射中并将其传递给 activity。 2) 您可以使用意图将相同的 json 字符串传递给其他 activity 并从那里读取 json 的数据。 3) 您可以将 Json 字符串存储在项目的静态字符串变量中,并可以在 activity 中访问相同的字符串(这对关键应用程序不公平,但很容易)
喜欢
创建一个 class Constantss.java 并声明
public 静态字符串我的json="";
然后在你的 class 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
您可以将一个片段与其所有者进行通信 activity 定义一个侦听器并与之交互,在 activity 上实现此接口,并从片段中调用侦听器,正如在官方文档:Communicating with Other Fragments
对我来说另一个不错的选择是使用像 greenrobot/EventBus
这样的事件总线如果你不打算使用这个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中,只需要将json
字符串再次转换为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);
...