我对Android很新。 我想做什么: 我通过API下载了JSON格式的数据。我正在尝试将其与其他一些数据捆绑在一起并将其发送到我的第二个活动。 我背后的逻辑是我创建了一个全局变量“JSONData”并在“onPostExecute”中分配了我下载到它的数据。 但是,当我尝试通过Intent(在一个包中)将它发送到第二个活动时,只显示第一个数据。 我的猜测是在下载JSON数据之前发送了bundle。 当我使用TextView显示数据时,数据肯定是通过API下载的。 任何人都可以给我一些提示,如何解决? 我将非常感激:)
public class MainActivity extends AppCompatActivity {
private String JSONData;
private TextView Data_Test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TestView = (TextView)findViewById(R.id.TestView);
}
public class JSONTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
URL url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
return buffer.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
JSONData = result;
/*Data_Test.setText(JSONData);*/
}
}
public void btnType0(View view) {
new JSONTask().execute("URL_with_API");
String activity_title = getResources().getString(R.string.housing_button);
Intent intent = new Intent(this, DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", JSONData);
intent.putExtras(extras);
startActivity(intent);
}
在我的第二个活动中,我收到了这样的包:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_data);
Bundle bundle = getIntent().getExtras();
String activity_title = bundle.getString("title");
TextView txtView = (TextView) findViewById(R.id.txtTitle);
txtView.setText(activity_title);
String JSONData = bundle.getString("JSON_Object");
TextView txtView1 = (TextView) findViewById(R.id.data_test);
txtView1.setText(JSONData);
}
答案 0 :(得分:1)
用于发送数据
Intent intent = new Intent(this, DisplayDataActivity.class);
intent.putString("title", activity_title);
intent.putString("JSON_Object", JSONData);
startActivity(intent);
For Recieve data
String activity_title = getIntent().getExtras().getString("title");
String JSONData = getIntent().getExtras().getString("JSON_Object");
答案 1 :(得分:0)
你必须这样使用。
Intent intent = new Intent(this,DisplayDataActivity.class);
//Bundle extras = new Bundle();
intent.putString("title", activity_title); intent.putString("JSON_Object", JSONData);
// intent.putExtras(extras);
startActivity(intent);
答案 2 :(得分:0)
你做错了!
new JSONTask().execute("URL_with_API");
您无法在JSONData变量中获取值,因为您已将其声明为全局属性,而是AsyncTask
中的赋值
这是后台进程,所以这一行将在后台进行,下一行将立即执行。以下
String activity_title = getResources().getString(R.string.housing_button);
Intent intent = new Intent(this, DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", JSONData);// so here JSONData always being null
intent.putExtras(extras);
startActivity(intent);
你必须在onPostExecute
开始这样的活动
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
String activity_title = getResources().getString(R.string.housing_button);
Intent intent = new Intent(this, DisplayDataActivity.class);
Bundle extras = new Bundle();
extras.putString("title", activity_title);
extras.putString("JSON_Object", result);
intent.putExtras(extras);
startActivity(intent);
}
public void btnType0(View view) {
new JSONTask().execute("URL_with_API");
}
或者只是在所需活动中传递Url并使用onCreate中的url获取该活动中的数据