Android:获取json数据并将其解析为列表视图
我目前正在从事一个android项目,我希望能够按下一个按钮,它将在另一个活动的列表视图中显示用户数据。我现在有它的工作在某种意义上,但它需要我按下两个按钮。一个从mysql数据库获取json数据,另一个将其发送到下一个活动,以便我显示它 我希望有一种方法,这两种方法都可以通过单击一个按钮来运行,或者两种方法都包含在一个方法中Android:获取json数据并将其解析为列表视图,android,mysql,json,Android,Mysql,Json,我目前正在从事一个android项目,我希望能够按下一个按钮,它将在另一个活动的列表视图中显示用户数据。我现在有它的工作在某种意义上,但它需要我按下两个按钮。一个从mysql数据库获取json数据,另一个将其发送到下一个活动,以便我显示它 我希望有一种方法,这两种方法都可以通过单击一个按钮来运行,或者两种方法都包含在一个方法中 public class MyMainActivity extends AppCompatActivity { String url = "http://192.16
public class MyMainActivity extends AppCompatActivity {
String url = "http://192.168.20.120";
String json_string;
View v;
//Button to get the data
ImageButton getUserDetailsBtn;
//Button to parse the data
ImageButton parseUserDetailsBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_main);
getUserDetailsBtn= (ImageButton)findViewById(R.id.getUserDetailsButton);
parseUserDetailsBtn = (ImageButton)findViewById(R.id.parseUserDetailsButton);
getUserDetailsBtn.setVisibility(View.GONE);
}
//
//get user details in app
//
public void getDetails(View view) {
new LoadUserDetails().execute();
parseUserDetailsBtn .setVisibility(View.GONE);
getUserDetailsBtn= .setVisibility(View.VISIBLE);
}
//Load the user details
class LoadUserDetails extends AsyncTask<Void,Void,String>
{
String json_url;
String JSON_STRING;
@Override
protected void onPreExecute() {
json_url = url+"/getUserDetails.php";
}
@Override
protected String doInBackground(Void... voids){
try{
URL url = new URL(json_url);
HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
while((JSON_STRING = bufferedReader.readLine())!=null)
{
stringBuilder.append(JSON_STRING+"\n");
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return stringBuilder.toString().trim();
} catch (MalformedJsonException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
TextView textview = (TextView) findViewById(R.id.textview);
textview.setText("");
json_string = result;
}
}
//
//parse the data
//
public void parseJSON(View view)
{
if(json_string==null){
Toast.makeText(getApplicationContext(), "First get JSON Data", Toast.LENGTH_LONG).show();
}
else{
Intent intent = new Intent(this, ShowUserActivity.class);
intent.putExtra("json_data", json_string);
startActivity(intent);
}
}
公共类MyMainActivity扩展了AppCompatActivity{
字符串url=”http://192.168.20.120";
字符串json_字符串;
观点五;
//按钮获取数据
ImageButton getUserDetailsBtn;
//按钮来解析数据
ImageButton parseUserDetailsBtn;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u my\u main);
getUserDetailsBtn=(ImageButton)findViewById(R.id.getUserDetailsButton);
parseUserDetailsBtn=(ImageButton)findViewById(R.id.parseUserDetailsButton);
getUserDetailsBtn.setVisibility(View.GONE);
}
//
//在应用程序中获取用户详细信息
//
公共void getDetails(视图){
新建LoadUserDetails().execute();
parseUserDetailsBtn.setVisibility(View.GONE);
getUserDetailsBtn=.setVisibility(View.VISIBLE);
}
//加载用户详细信息
类LoadUserDetails扩展了AsyncTask
{
字符串json_url;
字符串JSON_字符串;
@凌驾
受保护的void onPreExecute(){
json_url=url+“/getUserDetails.php”;
}
@凌驾
受保护的字符串背景(无效…无效){
试一试{
URL=新URL(json_URL);
HttpURLConnection HttpURLConnection=(HttpURLConnection)url.openConnection();
InputStream InputStream=httpURLConnection.getInputStream();
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(inputStream));
StringBuilder StringBuilder=新的StringBuilder();
而((JSON_STRING=bufferedReader.readLine())!=null)
{
追加(JSON_字符串+“\n”);
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
返回stringBuilder.toString().trim();
}捕获(格式不正确的异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onProgressUpdate(void…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的void onPostExecute(字符串结果){
TextView TextView=(TextView)findViewById(R.id.TextView);
textview.setText(“”);
json_string=结果;
}
}
//
//解析数据
//
公共空解析JSON(视图)
{
if(json_字符串==null){
Toast.makeText(getApplicationContext(),“首先获取JSON数据”,Toast.LENGTH_LONG.show();
}
否则{
Intent Intent=新的Intent(这个,ShowUserActivity.class);
putExtra(“json_数据”,json_字符串);
星触觉(意向);
}
}
从onPostExecute
开始活动,因为onPostExecute
在UI
线程上执行
@Override
protected void onPostExecute(String result) {
TextView textview = (TextView) findViewById(R.id.textview);
textview.setText("");
json_string = result;
if(json_string==null){
Toast.makeText(getApplicationContext(), "First get JSON Data", Toast.LENGTH_LONG).show();
}
else{
Intent intent = new Intent(MyMainActivity.this, ShowUserActivity.class);
// and change this to MyMainActivity.this
// this will point to your task instead of Activity
intent.putExtra("json_data", json_string);
startActivity(intent);
}
}
这是我认为会起作用的,但是当我像你一样将它放在onPostExecute()中时,我得到了一个错误,意思是“无法解析构造函数意图”。有什么想法吗?使用MyMainActivity。这个而不是这个,我很高兴我能帮上忙。编码快乐