Android 从另一个activty访问json响应
我有一个片段,在片段中访问Android 从另一个activty访问json响应,android,json,android-fragments,android-activity,android-asynctask,Android,Json,Android Fragments,Android Activity,Android Asynctask,我有一个片段,在片段中访问onCreate()中的API,然后获取对同一片段类的json响应(从AsyncTask类中的onPostExecute()返回)。现在我在onTaskCompleted()中接收到json响应,如下所示 @Override public void onTaskCompleted(JSONArray responseJson) { try { for (int i = 0; i < responseJson.leng
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);
...
任何帮助都将不胜感激
已更新
活动和片段之间没有直接联系。因为我没有使用意图。片段是菜单,我正在那里加载数据。活动用于搜索。我正在尝试获取已加载的数据以用于搜索活动。您只需将整个JSONObject作为字符串。大概是这样的:
i.putString("product", jsonObj.toString);
@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);
然后在第二种触觉中,你可以
JSONObject jsonObj = new JSONObject(getIntent().getStringExtra("product"));
您可以使用接口将数据从片段传递到活动,下面是一个非常简单的示例-
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);
}
}
希望这对你有所帮助:)你可以用不同的方式来做 1) 您可以读取json数据并将其存储在哈希映射中,然后将其传递给该活动。 2) 您可以使用intent将相同的json字符串传递给其他活动,并从那里读取json数据。 3) 您可以将Json字符串存储在项目的静态字符串变量中,并可以在活动中访问Json字符串(这对关键应用程序不公平,但很容易) 像 创建一个类Constantss.java并声明 公共静态字符串myjson=“” 然后在你的课堂上完成
@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);
....
}
您可以将一个片段与其所有者活动进行通信,活动定义并与侦听器接口,在活动上实现此接口,并从片段调用侦听器,正如官方文档中所建议的:
对我来说,另一个好的选择是使用事件总线,如,如果你不想使用这个json数据,你就不能处理它。如果需要的话,您只需要将这个json字符串传递给处理这些数据的第二个活动。
因此,代码可能如下所示:
i.putString("product", jsonObj.toString);
@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);
在第二个活动中,您只需再次将
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);
...
String json=getIntent().getString(“json”);
JsonArray JsonArray=新JsonArray(json);
试一试{
对于(int i=0;i
你可以使用@Fahim给出的答案,你能告诉我如何使用第三个选项吗,关于代码级别的一些帮助请Carthika PB你能告诉我我想要的内部活动和片段吗?我在js下遇到一个错误,Jsonstring无法解析为类型对不起,它不是Jsonstring,它是字符串。你需要将它转换为jsonarray或sim请看我的编辑…我如何将数据从片段发送到活动?没有直接联系,因为我没有使用意图。片段是菜单,我正在那里加载数据。活动用于搜索。非常感谢你的回答我能够以不同的方式实现这一点感谢你的回答我能够以不同的方式实现这一点退火炉